小编典典

Oracle:单个多列索引或两个单列索引

sql

我有桌子

create table1(
  column1 number(10,
  column2 number(10),
  column3 number(10)
);

column1是主键 column2column3是外键

我在2列上创建了唯一约束

alter table table1 
        add constraint table1_contr1 unique(column1,column2) 
      using index tablespace tbs1;

当我去在两个列上创建索引时

create index table1_idx1 on table1(column1,coulmn2);

ERROR at line 1:
ORA-01408: such column list already indexed

因此,当我创建唯一约束时,Oracle已经创建了索引。但是,如果我单独创建索引,那就是接受那些

create index table1_idx1 on table1(column1);
create index table2_idx2 on table2(column2);

现在我的问题是,在两个列上都有唯一的约束之后,我仍然需要担心在每个列上创建索引吗?查询表时省略单列索引是否会对性能产生影响?

在oracle 11R2上。


阅读 288

收藏
2021-04-22

共1个答案

小编典典

这取决于…

column1如果您已经在上创建了复合索引,那么在上仅创建一个索引的可能性很小column1, column2。由于column1是前导索引,因此仅column1作为谓词的表查询将能够使用复合索引。如果您经常运行需要对索引进行全面扫描的查询,并且存在column2大量增加索引的大小的情况,则column1由于完全索引扫描所需要做的事少,因此对just的索引可能会更高效。
I / O。但这是一个非常不寻常的情况。

column2如果对表的某些查询在just上指定谓词,则对just的索引可能会有所帮助column2。如果的不同值相对较少column1,则Oracle可能会使用复合索引进行索引跳过扫描,以满足仅指定column2为谓词的查询。但是跳过扫描的效率可能比范围扫描的效率低得多,因此,合理的是Just上的索引column2将使这些查询受益。如果存在大量不同的值column1,则跳过扫描的效率将更低,而仅对index进行索引column2将更为有益。当然,如果您从未在column2不指定谓词on的情况下使用查询表,则column1just不需要索引column2

2021-04-22