gpt4 book ai didi

sql - 甲骨文 : Single multicolumn index or two single column indexes

转载 作者:行者123 更新时间:2023-12-04 11:39:03 25 4
gpt4 key购买 nike

我有 table

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 上。

最佳答案

这取决于...

不太可能仅在 column1 上建立索引如果您已经在 column1, column2 上有一个复合索引,那将是有益的。 .自 column1是前导索引,查询只有column1的表作为谓词就能使用复合索引。如果您经常运行需要对索引进行全面扫描的查询,并且存在 column2大大增加了索引的大小,有可能只是 column1 上的一个索引会更有效,因为完整索引扫描需要做更少的 I/O。但这是一个非常不寻常的情况。

column2 上的索引如果您对表的某些查询仅在 column2 上指定谓词,则可能会有所帮助。 .如果 column1 的不同值相对较少,Oracle 有可能使用复合索引进行索引跳过扫描,以满足仅指定 column2 的查询。作为谓词。但是跳过扫描可能比范围扫描效率低得多,因此很有可能只是 column2 上的索引。将有益于这些查询。如果 column1 有大量不同的值,跳过扫描的效率会更低,而且索引仅在 column2 上。会更有利。当然,如果您从不使用 column2 查询表没有在 column1 上指定谓词,您不需要仅在 column2 上的索引.

关于sql - 甲骨文 : Single multicolumn index or two single column indexes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19599773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com