5

我正在使用一个新的 Oracle 数据库,其中一个表具有以下索引:

  • 索引 1:ColA、ColB
  • 索引 2:ColA

第二个索引是多余的吗,这会对性能产生负面影响吗?

4

4 回答 4

5

谷歌是我最好的朋友:

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 中搜索“重复索引”会有不同的答案。

于 2009-07-02T07:50:54.007 回答
2

第二个索引是不同的,并且本身不是多余的。

这个查询怎么样:

SELECT DISTINCT ColA FROM TABLE WHERE ColA IS NOT NULL;

Oracle 可以完全从索引 2 回答这个问题。现在,索引 2 应该比索引 1 小(块更少)。这意味着,对于上述查询来说,它是一个更好的索引。

如果您的应用程序从未执行过比 Index1 更适合 Index2 的查询,那么它对您的应用程序来说是多余的。

索引始终是性能权衡。当执行插入、更新或删除时,为了维护每个附加索引,需要做额外的工作。

指数提供的更高性能是否足以弥补这一点?取决于您的应用程序和数据使用情况。

于 2009-08-05T07:29:57.013 回答
1

第二个索引有点多余——任何使用 Index2 的操作都可以使用索引 1。此外,由于还有另一个索引要更新,因此写入会稍微慢一些。

也就是说,Index2 并不是完全多余的,因为它可能会更快一些,因为索引本身可能会明显更小。

于 2009-06-19T20:41:15.530 回答
1

如果您的统计信息过时,优化器可能会在需要索引 1 时选择索引 2。(当然,优化器的提示可以解决这个问题。)

于 2009-06-19T20:55:07.733 回答