1

いくつかのインデックス (I1 ~ I5 など) を持つ大きなテーブルがあります。

使用パターンは次のとおりです。

アプリケーション A: すべての選択クエリは 100% インデックス I1 から I4 を使用します (I5 を使用しないよう十分に設計されていると仮定します)。

アプリケーション B: 選択クエリが 1 つだけあり (かなり頻繁に実行されます)、6 つのフィールドが含まれ、対象インデックスとして 5 番目のインデックス I5 が作成されました。

カバーされたインデックスの最初の 2 つのフィールドは、日付とセキュリティ ID です。このテーブルには、約 100 の日付 (クラスター化インデックス I1 によって適用される日付順) の行と、数万のセキュリティ識別子が含まれています。

質問: 対象となるインデックスの列の順序は、アプリケーション B の選択クエリのパフォーマンスに影響しますか?

つまり、インデックスの最初の 2 つのフィールド (日付とセキュリティ ID) を切り替えると、クエリのパフォーマンスが変わるでしょうか? 最後のフィールドの 1 つを切り替えると、クエリのパフォーマンスは変わりますか?

論理 IO は、カバーされたインデックス内のフィールドの順序の影響を受けないままであると想定しています (100% 確実ではありませんが)。

しかし、他のパフォーマンスへの影響はありますか? (オプティマイザーの速度、キャッシュなど...)

質問はバージョン ジェネリックですが、問題がある場合は、Sybase 12 を使用します。

残念ながら、表が膨大なため、実際に指数を変更し、その効果を定量的に確認することは非常に困難です。

4

2 に答える 2

1

場合によります。次のような WHERE 句がある場合、逆よりも (security_ID, date_column) のインデックスの方がパフォーマンスが向上します。

WHERE date_column BETWEEN DATE '2009-01-01' AND DATE '2009-08-31'
  AND security_ID = 373239

次のような WHERE 句がある場合、逆よりも (date_column, security_ID) のインデックスから優れたパフォーマンスが得られます。

WHERE date_column = DATE '2009-09-01'
  AND security_ID > 499231

次のような WHERE 句がある場合、どの列が最初に表示されるかはあまり重要ではありません。

WHERE date_column = DATE '2009-09-13'
  AND security_ID = 211930

パフォーマンスを向上させるためにインデックスを編成する他の方法があるかどうかを知るために、インデックス内の他の列の選択性と条件について知る必要があります。

あなたの質問がバージョン ジェネリックであるように、私の答えは DBMS ジェネリックです。

于 2009-09-23T01:51:04.180 に答える
1

残念ながら、表が膨大なため、実際に指数を変更し、その効果を定量的に確認することは非常に困難です。

問題はテーブルのサイズではありません。何百万もの行は、Sybase にとっては何の意味もありません。

問題は、テスト システムがないことです。

于 2010-10-23T10:51:49.787 に答える