我很确定这在Oracle中无法做到,但我很乐意被证明是错误的
说我有一个巨大的表,有很多列,我想在十几个列上创建索引.使用Oracle,我会启动几个连续的创建索引语句,并关闭并烧开水壶.
每个创建索引需要扫描表中的每一行以形成索引.
即10个索引= 10次全扫描.
你会认为一个明显的优化是扫描一次表并同时对10列进行索引.不是吗
create indexes on mytable ( ix_mytable_cola (cola),ix_mytable_colb (colb),ix_mytable_colc (colc) );
很明显,为什么不在那里呢?
有任何想法吗?
我可以在单独的会话中同时触发每个创建索引,并希望数据库缓冲区缓存保存一天,但是似乎是一个漫长的镜头.
编辑
我没有得到一个明确的答案,所以我在Oracle-L上提出了同样的问题:
http://www.freelists.org/post/oracle-l/Creating-multiple-indexes
普遍的共识是,它不可用,但可能是一个有用的功能.最有用的回应来自David Aldridge,他们建议如果创建索引语句同时被启动,那么Oracle将“做正确的事情”.
解决方法
对Oracle而言,答案是否定的,根据我的研究,对DB2也是如此.我怀疑任何其他人都有这个功能.