我正在使用新的Oracle DB,其中一个表具有以下索引:
第二个索引是多余的,这会对性能产生负面影响吗?
答案 0 :(得分:5)
Google是我最好的朋友:
http://www.orafaq.com/node/926
本文的要点是:
If 2 indexes ( I1 and I2 ) exist for a table and
the number of columns in Index I1 is less or equal to the number of column in index I2 and
index I1 has the same columns in the same order as leading columns of index I2
Then
If index I1 is UNIQUE then
If index I2 is used to support Foregh Key or for Index Overload then
Do Nothing
Else
Index I2 can be DROPPED
End If
Else
Index I1 can be DROPPED
End If
End If
我同意这一点! 实际上,在Google中搜索“重复索引”会有不同类型的答案。
答案 1 :(得分:2)
第二个索引不同,本身并不冗余。
这个查询怎么样:
SELECT DISTINCT ColA FROM TABLE WHERE ColA IS NOT NULL;
Oracle完全可以从索引2回答这个问题。现在,索引2预计会比索引1小(减少块)。这意味着,它是上述查询的更好索引。
如果您的应用程序从未执行过比Index2更适合Index2的查询,那么它对您的应用程序来说是多余的。
索引始终是性能权衡。当执行插入,更新或删除时,还需要做额外的工作来维护每个附加索引。
索引提供的性能提升可以弥补这一点吗?取决于您的应用程序和数据使用情况。
答案 2 :(得分:1)
第二个索引是多余的 - 使用Index2的任何操作都可以使用索引1.此外,由于还有另一个要更新的索引,因此写入速度会稍慢。
也就是说,Index2并不完全是多余的,因为索引本身可能要小得多,因为它可能会更快一点。
答案 3 :(得分:1)
如果您的统计信息过期,优化程序可能会在需要索引1时选择索引2。 (当然,提示优化器会解决这个问题。)