是否有任何数据库允许同时创建同一个表上的多个索引?

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将"做正确的事情".

die*_*dha 5

我不认为在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)


hol*_*hol 1

对于 Oracle 来说,答案是否定的,根据我的研究,对于 DB2 来说,答案是否定的。我怀疑其他人有这个功能。