【问题标题】:Oracle performance with multiple same column indexes具有多个相同列索引的 Oracle 性能
【发布时间】:2009-06-19 20:37:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: performance indexing oracle9i


    【解决方案1】:

    谷歌是我最好的朋友:

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

    【讨论】:

    • 这在大多数情况下可能是正确的,但请参阅我的回答,了解何时删除重叠索引可能是错误的。
    【解决方案2】:

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

    这个查询怎么样:

    SELECT DISTINCT ColA FROM TABLE WHERE ColA IS NOT NULL;
    

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2017-09-08
          • 2011-01-25
          • 1970-01-01
          • 2021-02-22
          • 2011-10-20
          • 2014-09-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多