1

GuidまたはInt主キーのどちらを使用するのが良いですか? Guid を優先する検索結果もあれば、Int を優先する検索結果もあります。それでは、それぞれの長所と短所は実際には何ですか。

4

2 に答える 2

2

SQL Server の場合、INT IDENTITY私は主キーとクラスタリング キーのほとんどに個人的に使用しています。

論理構造である主キーを区別する必要があります。行を一意に識別し、一意で安定している必要がありNOT NULLます。AGUIDは一意であることが保証されているため、主キーにも適しています。SQL Server レプリケーションを使用する場合は、主キーとしてAGUIDを選択することをお勧めします。その場合、とにかく一意に識別する GUID 列が必要になるためです。

SQL Serverのクラスタリング キーは、データの物理的な順序付けに使用される物理的な構成要素であり、正しく理解するのははるかに困難です。通常、 SQL Serverのインデックス作成の女王であるKimberly Tripp も、適切なクラスタリング キーが一意で、安定しており、可能な限り狭く、理想的には増加し続けることを求めています (これは aINT IDENTITYです)。

インデックス作成に関する彼女の記事を参照してください。

Jimmy Nilsson のThe Cost of GUIDs as Primary Keyも参照してください。

GUID は、クラスタリング キーとしては非常に不適切な選択です。これは、幅が広く、完全にランダムであるため、インデックスの断片化が悪化し、パフォーマンスが低下するためです。また、クラスター化キー行は、すべての非クラスター化 (追加) インデックスのすべてのエントリにも格納されるため、実際には小さくしておく必要があります - GUID16 バイト対INT4 バイトであり、いくつかクラスター化されていないインデックスと数百万行の場合、これは大きな違いになります。

SQL Server では、主キーは既定でクラスタリング キーですが、そうである必要はありません。GUID をクラスタ化されていない主キーINT IDENTITYとして、およびクラスタリング キーとして簡単に使用できます。

于 2011-11-01T10:02:12.603 に答える
1

整数の主キーはシーケンシャルであるため (自動インクリメントを想定)、行を DB に書き込むのがより簡単になります。GUID は基本的にランダムであるため、行を挿入するとページ分割が発生し、挿入速度が低下する可能性があります。どうしても GUID を PK として使用したい場合newsequentialidは、GUID が順番に生成されるようにする機能を検討してください。

于 2011-11-01T09:44:54.437 に答える