SQL Server内の一意の識別子のID列にクラスタ化された主キー
-
23-08-2019 - |
質問
テーブルの上に自分のID列が一意識別子(GUID)がある場合は、ID列上のクラスタ化されたの主キーを作成する任意のポイントはありますか?
どのようにソート仕事だろう、彼らはグローバルに一意であることを考えると?
解決
GUIDは、彼らがそうであるように、パフォーマンスのために恐ろしいであり、より少ないエントリは単一のページ/範囲(SQL Serverの用語)の上にフィットするので、彼らは、インデックスのためにひどいです。 SQL Server 2005には、最初の問題を解決するのに役立ちますどの newsequentialid()
するを紹介しますます。
他のヒント
私は強く、我々は数年前にあるため、このような貧弱なデザインのSQLサーバーに大きなパフォーマンスの問題を持っていた...クラスタ化されたGuidキーを使用しないことをお勧めします。
また、チェックアウト:クラスタ索引GUID主キーのパフォーマンスの向上>
GUID列にクラスタ化インデックスを置くことは、このような良いアイデアではありません。
クラスタ化インデックスは、レコードが格納されているかの物理的な順序を決定します。
これは、あなたが順次成長しない列にクラスタ化インデックスを置く場合、SQL Serverは、新しいレコードを挿入するとき、レコードが正しく物理的に順序付けられていることを確認していくつかの仕事を持っているだろう、ということを意味します。
ソートされたインデックスを持つというアイデア自体は非常に良いです。
問題は、しかし、GUIDの1の場合には「GUIDは、XYZを= WHERE」で検索したことがないということです。だから、全体のコンセプトが無駄になります。だから、私はむしろ、クエリの効率を高めるためにSARGとして最も頻繁に使用される列にクラスタ化インデックスを持ってお勧めします。