web-dev-qa-db-ja.com

クラスタ化インデックスシークと非クラスタ化インデックスシークの違い

クラスタ化インデックス(CI)シークと非クラスタ化インデックス(NCI)シークの違いは何ですか?一方のパフォーマンスは他のパフォーマンスよりも優れていますか?

これを尋ねる理由は、5,000万行と150列のテーブルがあるためです。クラスタ化インデックスとして定義されたIDという名前の列があります。同じインデックスキーIDと7つのinclude- d列を持つNCIがもう1つあります。 NCインデックスはここでは重複しており、安全に削除できるようです。

安全にドロップできるか、そのままにしておく必要がある場合は、専門家の意見/アドバイスが必要ですか?

10
SQLPRODDBA

非クラスター化インデックスは通常より小さく密度が高いため、クラスター化インデックスと同じキー(複数可)*を持つ非クラスター化インデックスは依然として有用です。クラスター化インデックスにはすべての行内データが含まれているため、通常、これは可能な限り最も広い(最も密度の低い)インデックスです。

*同じキー列が同じ順序で、同じ方法でソートされます(asc/desc)。

シングルトンシーク(一意のインデックスへの等価述語を使用したシーク)の主な違いは、単一のレコードが既にメモリ内にあることを検出するために必要なインデックスページの確率が高いと推定されていることです。すべてが同じであれば、100ページの非クラスター化インデックスは、10,000ページに格納されたクラスター化インデックスよりも可能性が高くなります。

シングルトン以外の他の種類のシークについては、スキャンコンポーネントも存在します。スキャン部分には、非クラスター化インデックスの密度が高いこと(ページあたりの行数が多い)のメリットもあります。永続ストレージからページを取得する必要がある場合でも、読み取るページが少ないほど高速です。

このドキュメントが存在する理由を理解するには、システムのドキュメントを確認し、インデックスを追加した人に尋ねるか、コードのコメントを探してください。また、完全なインデックス定義を注意深く確認し(圧縮を含む)、インデックスメンテナンススクリプトを確認する必要があります。非クラスター化インデックスを使用する他の特別な理由がある可能性があります(オンラインで再構築する機能など)。

26
Paul White 9