1

ここに画像の説明を入力

データベースにこのテーブルがあり、HusbandPersonIdWifePersonIdは という別のテーブルへの外部キーPersonであり、開始日/終了日は結婚の開始日と終了日を示しています。

そして、私はこのクエリを持っています:

SELECT
   DISTINCT A.WifePersonId
FROM
   Couple A
   INNER JOIN Couple B
      ON A.WifePersonId = B.WifePersonId
      AND A.HusbandPersonId <> B.HusbandPersonId
      AND A.StartDate < B.EndDate
      AND A.EndDate > B.StartDate;

同時に複数の人と結婚している妻を返します。

ここで、このクエリの検索速度を向上させるためにインデックスを追加したいと思います。

どのインデックスが最適で、インデックスが追加される前後のクエリの実行計画は?

これは宿題のリクエストで、検索しすぎましたが、役立つトピックが見つかりませんでした

誰でもこれを手伝ってもらえますか?

4

1 に答える 1

1

一般的なインデックス作成ルールでは、結合条件にすべてのフィールドを含めることをお勧めします。これらのフィールドの順序が影響する場合があります。繰り返しになりますが、一般的な規則では、カーディナリティ(各フィールドの一意の値の数)の昇順でフィールドを並べ替えることをお勧めします。

だからあなたは試すかもしれません:

CREATE INDEX Couple__multi ON Couple(StartDate, EndDate, WifePersonId, HusbandPersonId)

これは、個別の開始日/終了日の数が、一意の妻/夫のPersonIdの数よりも少ないことを前提としています。

これらのルールは、基本的に101タイプのものにインデックスを付けることです。ほとんどの場合、許容可能なレベルのパフォーマンスが得られます。これがあなたの目的に十分であるかどうかは、あなたのデータとアプリケーションに大きく依存します。

個人的には、SQL Performance Analyzerが推奨するインデックスについてはあまり考えていませんが、最後にSQL2005でそれらを真剣に検討しました。それ以来、ある程度の改善が見られたと思います。

お役に立てれば。

于 2013-01-03T07:48:29.077 に答える