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


10

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

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

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


すべての列がクラスター化されていないインデックスに含まれていると言いますか?
Ian Ringrose 2016年

いいえ。テーブルには150の列があり、ID列はCIとして定義されています。NCIインデックスには、ID列がインデックスキーとして含まれ、さらに7列が含まれています。
SQLPRODDBA 2016年

次に、Paul Whiteが正しい答えを出したようですが、「ベース」テーブルをクラスタ化テーブルからヒープに変更する必要があるかどうかを質問します。または、異なる列が更新される頻度に応じてテーブルを分割し、トランザクションログのコストを削減します。
イアンリングローズ2016年

回答:


26

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

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.