テーブルの ID 列が一意の識別子 (Guid) である場合、ID 列にクラスター化された主キーを作成する意味はありますか?
それらがグローバルに一意であることを考えると、並べ替えはどのように機能しますか?
テーブルの ID 列が一意の識別子 (Guid) である場合、ID 列にクラスター化された主キーを作成する意味はありますか?
それらがグローバルに一意であることを考えると、並べ替えはどのように機能しますか?
クラスター化された Guid キーを使用しないことを強くお勧めします... 数年前、このような貧弱な設計が原因で、SQL サーバーで大きなパフォーマンスの問題が発生しました。
またチェックアウト:クラスター インデックス GUID プライマリ キーのパフォーマンスの向上
GUID は実質的にランダムな値であるためパフォーマンスが悪く (これによりクラスター化インデックスが「壊れる」)、単一のページ/エクステントに収まるエントリが少ないため (SQL Server 用語)、インデックスにはひどいものです。SQL Server 2005 ではnewsequentialid()
、最初の問題の解決に役立つ機能が導入されています。
クラスター化されたインデックスを guid 列に配置することは、あまり良い考えではありません (順次 guid を使用している場合を除きます)。
クラスター化インデックスは、レコードの格納方法の物理的な順序を決定します。
これは、順次拡大しない列にクラスター化インデックスを配置すると、SQL Server は、新しいレコードを挿入するときにレコードが物理的に正しく順序付けられていることを確認する作業を行うことを意味します。
検索が非常に効率的になるため、ソートされたインデックスを持つという考えはそれ自体が非常に優れています。
ただし、問題は、GUID の場合、「WHERE GUID = xyz」で検索しないことです。そのため、コンセプト全体が無駄になります。したがって、クエリの効率を高めるために、SARG として最も頻繁に使用される列にクラスター化インデックスを配置することをお勧めします。