SQL Server-クラスター化インデックスと非クラスター化インデックスを使用する場合


99

クラスタ化インデックスと非クラスタ化インデックスの主な違いを知っており、それらが実際にどのように機能するかを理解しています。クラスタ化インデックスと非クラスタ化インデックスが読み取りパフォーマンスを向上させる方法を理解しています。しかし、私が確信していないことの1つは、私がどちらを選ぶかという理由が何であるかということです。

例:テーブルにクラスター化インデックスがない場合、非クラスター化インデックスを作成する必要があり、実行するメリットは何ですか


3
ご返信いただきありがとうございます。私はすでにそれを知っています。私の質問は、非クラスタ化インデックスを作成すると、クラスタ化インデックスを作成するよりもメリットがあるという状況があるでしょうか
armulator

2
はい、次の場合はクラスター化インデックスを使用しないでください。列には、それは...多くの列の複合体である、低カーディナリティ、順不同、頻繁に更新され、非連続を持っている
TI

ご回答有難うございます。その有用性
アーマレーター2013

1
おそらく、この質問はあなたを助けるでしょう:stackoverflow.com/questions/5070529/...
デヴィッド・ガルシア・ゴンサレス

回答:


117

ただ一言注意したいのですが、クラスタ化インデックスを慎重に選んでください!はい、 -すべての「通常の」データテーブルは、クラスタ化インデックスを持つことは確かオペレーションの多くをスピードアップないので、クラスタ化インデックスを持っているべきスピードアップ、でも挿入および削除!ただし、適切なクラスター化インデックスを選択した場合のみです。

これは、SQL Serverデータベースで最も複製されたデータ構造です。クラスタリングキーも、テーブルのすべての非クラスター化インデックスの一部になります。

クラスタリングキーを選択するときは、細心の注意を払う必要があります。

  • 狭い(4バイトが理想的)

  • 一意(結局のところ、これは「行ポインタ」です。一意にしない場合、SQL Serverがバックグラウンドで実行します。各エントリの数バイトに、行数と非クラスタ化インデックスの数を掛けたものになります。あなたが持っている-これは非常に高価になる可能性があります!)

  • 静的(変更しない-可能であれば)

  • 理想的には常に増加するので、恐ろしいインデックスの断片化に陥ることはありません(GUIDは、適切なクラスタリングキーとは正反対です-特定の理由による)

  • null可能ではなく、理想的には固定幅である必要があります-a varchar(250)は非常に貧弱なクラスタリングキーを作成します

それ以外のものは、これらのポイントの背後にある重要な2番目と3番目のレベルでなければなりません。

トピックに関するキンバリートリップ(The Queen of Indexing)のいくつかのブログ投稿をご覧ください-彼女がブログに書いたものはすべて、非常に貴重です-読んで、ダイジェスト-ライブで!


1
明確な説明をしてくれたmarc_sに感謝します。しかし、技術的に言えば、non clusteredインデックスは私たちにとって何をしますか。その重要性は何ですか。
2016

@nad:適切に選択された非クラスター化インデックスは、検索を高速化できます。何百万ものデータ行を検索基準と比較する必要がなく、わずか4、5回の比較で特定の行を見つけることができます。それは大きな違いになります!
marc_s 2016

1
@MuriloKunze:読んで話題のキム・メーカーTrippのブログ投稿を -このような場合は、なぜ彼女は非常に詳細に説明する
marc_s

5
申し訳ありませんが、「SQL Server-クラスタ化インデックスと非クラスタ化インデックスを使用する場合」という質問に対する回答はどこにありますか??
エデュアルド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.