同じデータに2つのインデックスを格納することは、ディスクスペースとデータを維持するために必要な処理の浪費です。
しかし、私はIX_PrimaryKey
という名前のインデックスの存在に依存する製品を想像することができます。例えば。
string queryPattern = "select * from {0} as t with (index(IX_PrimaryKey))";
あなたは葉が実際のデータであるため、クラスタ化インデックス自体は、他よりもはるかに少ないスペースを占有するという議論をすることができます。一方、クラスタード・インデックスはページ分割の影響を受けやすく、一部のインデックスはクラスター化されていない方が優れています。
私はこれらの優れたデザインは考えていませんが、誰かがそれをやっていることは間違いありません。 (あなたはDailyWTFに投稿しましたか?)
を、それが同一でないインデックスが重複していることは理にかなって例があります。
create index IX_1 on table1 (ID)
create index IX_2 on table1 (ID, TYPE, ORDER_DATE, TOTAL_CHARGES)
あなたは厳密IDで見上げている場合は、SQLを最適化し、使用することができますIX_1。 ID, TYPE, ORDER_DATE
に基づいてクエリを実行していて、合計がTOTAL_CHARGES
である場合、SQLはIX_2
を「カバリングインデックス」として使用して、テーブルに触れることなくインデックスのすべてのクエリの詳細を満たすことができます。一般に、これは広範なテストの後、パフォーマンスチューニングの過程で追加するものです。
全く同じフィールドで2つのインデックスの例を見ても、私はぴったりです。おそらく、SQLはIX_PrimaryKey
で値の存在をチェックし、何らかのブロッキングをバイパスする際に "カバーインデックス"としてIX_ID
を使用できますか?
私はDailyWTFを考えていましたが、それはちょっと意味があると思っていました。:) – GordyII