Oracle:是否可以用唯一的组合索引替换标准的非唯一单列索引?
我目前正致力于在索引结构方面优化我的数据库模式。因为我想提高DDL性能,所以我正在我的Oracle 12c系统上寻找潜在的drop候选者。在这种情况下,如果我删除索引,我不知道会对查询性能造成什么后果 给定同一表上的两个索引: -非唯一的单列索引IX_A索引A列 -唯一的组合索引UQ_AB索引A列,然后索引B列Oracle:是否可以用唯一的组合索引替换标准的非唯一单列索引?,oracle,performance,indexing,Oracle,Performance,Indexing,我目前正致力于在索引结构方面优化我的数据库模式。因为我想提高DDL性能,所以我正在我的Oracle 12c系统上寻找潜在的drop候选者。在这种情况下,如果我删除索引,我不知道会对查询性能造成什么后果 给定同一表上的两个索引: -非唯一的单列索引IX_A索引A列 -唯一的组合索引UQ_AB索引A列,然后索引B列 使用索引监视,我发现查询优化器没有选择UQ_AB,而只选择IX_A,可能是因为它更小,因此读取速度更快。由于UQ_AB包含A列和B列,我想删除IX_A。尽管我不确定如果我这样做是否会受到
使用索引监视,我发现查询优化器没有选择UQ_AB,而只选择IX_A,可能是因为它更小,因此读取速度更快。由于UQ_AB包含A列和B列,我想删除IX_A。尽管我不确定如果我这样做是否会受到任何性能惩罚。组合唯一索引的较高选择性是否对执行计划有任何影响 可以,不过通常情况下很可能是次要的。当然,这取决于各种因素,例如B列中的值有多大 您可以查看USER_索引中的各个列来比较这两个索引,例如: BLEVEL:告诉你索引树的高度,高度是BLEVEL+1 LEAF_BLOCKS:索引值占用了多少数据块 不同的_键:索引的选择性如何 您需要先分析表格,以确保这些数据准确无误。这将让您了解Oracle需要做多少工作才能使用索引查找一行
当然,唯一真正确定的方法是基准测试和比较计时,甚至跟踪输出。感谢您的回答,我将检查用户索引,尤其是索引高度应该有助于决定是否删除索引或保留索引。尽管如此,我还是会尝试一下,删除索引,看看我的基准测试的表现如何。我只是不确定Oracle在执行计划计算中使用唯一组合索引的方式是否存在系统性差异。