Nic*_*int 10 sql oracle indexing
我很确定在Oracle中无法做到这一点,但我很想被证明是错的......
假设我有一个包含大量列的大表,我想在十几个列上创建索引.使用Oracle,我将启动几个连续的create index语句,然后开始烧水壶.
每个人都create index需要扫描表中的每一行以形成索引.
即10个索引= 10个完整扫描.
您认为明显的优化是扫描表一次并同时索引10列.不是吗?
create indexes on mytable (
ix_mytable_cola (cola),
ix_mytable_colb (colb),
ix_mytable_colc (colc)
);
Run Code Online (Sandbox Code Playgroud)
很明显,必须有一个很好的理由,为什么它不存在.
有任何想法吗?
我可以create index在单独的会话中同时触发每个,并希望数据库缓冲区缓存保存当天,但似乎是一个长镜头.
编辑
我没有得到明确的答案所以我在Oracle-L上问了同样的问题:
http://www.freelists.org/post/oracle-l/Creating-multiple-indexes
普遍的共识是它不可用,但可能是一个有用的功能.最有用的回应来自David Aldridge,他建议如果创建索引语句全部同时启动,那么Oracle将"做正确的事情".
我不认为在Oracle或任何其他DBMS中是可能的。但是,在Oracle中,您可以使用PARALLEL和这样的选项来加快索引的创建NOLOGGING。
PARALLEL 使您可以将处理并行化到其他N个CPUS上。
NOLOGGING 放弃写入重做日志(可能不适合您)。
CREATE INDEX some_idx
ON a_table(col1, col2, col3)
PARALLEL 3
NOLOGGING;
Run Code Online (Sandbox Code Playgroud)