クラスタ化インデックスがない場合、テーブルはヒープとして編成されます。つまり、挿入されているすべての行が、表の最後のデータページに追加されます。また、行が更新されると、更新されたデータが以前よりも大きければ、表の最後のデータページに移動します。
あなたが最速の挿入を必要とするテーブルを持っていますが、更新を犠牲にし、スピードを読み取ることができ、その後、クラスタ化インデックスは、のために働くことがない場合は、クラスタ化インデックス
を持っていないのは良いです君は。 1つの例は、キューとして使用されていたテーブルがある場合です。たとえば、多くの挿入が後で読み込まれて別のテーブルに移動されるなどです。
クラスタ化インデックス
クラスタ化インデックスは、クラスタ化インデックスの列に基づいて、テーブル内のデータを整理します。あなたがユニークな識別子のように間違ったことをすると、これは物事を遅くすることができます(下記参照)。
クラスタ化インデックスが検索に最も一般的に使用される値であり、一意であり、それらを増やすと、クラスター化インデックスのパフォーマンスが向上します。たとえば、USER_IDに基づいてユーザーデータを検索するUSERSというテーブルがある場合、USER_IDでクラスタリングすると、すべてのルックアップのパフォーマンスが向上します。これにより、データを読み込むために必要なデータページの数が単純に削減されます。
クラスタ化インデックスにキーが多すぎると、状況が遅くなる可能性があります。クラスタ化インデックスの
一般規則:
は、任意のvarchar列にクラスタ化しないでください。
通常、INT IDENTITY列でのクラスタリングが最適です。
あなたが一般的に検索しているものに集中してください。インデックス内のuniqueidentifiersでUniqueIdentifiers
上
クラスタリング全く自然なソート順がないため、彼らは非常に非効率的です。索引のbツリー構造に基づいて、uniqueidentifierを使用するときわめて断片化された索引が作成されます。再構築または再編成後、それらは依然として非常に細分化されています。だから、インデックスが遅くなり、断片化のためにメモリとディスクに膨大な量になってしまいます。また、uniqueidentifierの挿入時には、インデックス上のページ分割によって結局挿入が遅くなる可能性が高くなります。一般的に、uniqueidentifierはインデックスの悪いニュースです。
まとめ
私の推薦はない(キューとして機能すなわちテーブル)には本当に十分な理由がある場合を除き、すべての表がそれにクラスタ化インデックスを持つべきであるということです。
[DBA-SE](http://dba.stackexchange.com/)に関するいくつかの情報といくつかのリンクがあります。 [クラスタ化されたインデックスに対するヒープ上の非クラスタ化インデックスのパフォーマンス](http://dba.stackexchange.com/questions/9829/performance-of-non-clustered-indexes-on-heaps-vs-clustered-indexes) –
おそらくa質問は、OracleとSQL Serverの両方に精通している人が最もよく答えます。 [dba.se]はこれに適した場所です。 –
また、この質問をdba.seに移動することをお勧めします。実際にクラスタ化された索引やIOTを実際に取り上げている他のポスターがないと、DBA.SEのレギュラーから2つのコメントと(まったく偶然の)回答がありました。実際には大きな違いがあります。 – ConcernedOfTunbridgeWells