5

私は新しいOracleDBを使用しており、1つのテーブルに次のインデックスがあります。

  • インデックス1:ColA、ColB
  • インデックス2:ColA

2番目のインデックスは冗長ですか?これはパフォーマンスに悪影響を及ぼしますか?

4

4 に答える 4

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で「重複インデックス」を検索すると、さまざまな種類の回答が得られます。

于 2009-07-02T07:50:54.007 に答える
2

2 番目のインデックスは異なり、それ自体は冗長ではありません。

このクエリはどうですか:

SELECT DISTINCT ColA FROM TABLE WHERE ColA IS NOT NULL;

オラクルはこの質問に完全にインデックス 2 から答えることができます。ここで、インデックス 2 はインデックス 1 よりも小さい (ブロック数が少ない) と予想されます。これは、上記のクエリに対してより適切なインデックスであることを意味します。

アプリケーションが Index1 よりも Index2 に適したクエリを実行しない場合、それはアプリケーションにとって冗長です。

インデックスは常にパフォーマンスのトレードオフです。挿入、更新、または削除が実行されると、追加の各インデックスを維持するために追加の作業が必要になります。

これは、インデックスによって提供されるパフォーマンスの向上によって十分に補われていますか? アプリケーションとデータ使用量によって異なります。

于 2009-08-05T07:29:57.013 に答える
1

2番目のインデックスは一種の冗長です。Index2を使用する操作ではインデックス1を使用できます。また、更新する別のインデックスがあるため、書き込みは少し遅くなります。

とはいえ、インデックス自体はおそらく大幅に小さくなるため、インデックス2は少し高速になる可能性があるため、完全に冗長ではありません。

于 2009-06-19T20:41:15.530 に答える
1

統計が古くなっている場合、インデックス 1 が必要なときにオプティマイザがインデックス 2 を選択する可能性があります。(もちろん、オプティマイザへのヒントはそれを解決します。)

于 2009-06-19T20:55:07.733 に答える