インデックスを扱うときは、テーブルを何に使用するかを決定する必要があります。主に 1 秒あたり 1000 行を挿入し、クエリをまったく実行しない場合、クラスター化インデックスはパフォーマンスに打撃を与えます。1 秒間に 1000 件のクエリを実行している場合、インデックスがないとパフォーマンスが大幅に低下します。クエリ/インデックスを調整しようとするときの最善の方法は、SQL Server でクエリ プラン アナライザーと SQL プロファイラーを使用することです。これにより、コストのかかるテーブル スキャンやその他のパフォーマンス ブロッカーが発生している場所がわかります。
GUID 対 ID の議論については、オンラインで両方を支持する人を見つけることができます。私は、よほどの理由がない限り、常に GUID を使用するように教えられてきました。Jeff は、GUID を使用する理由について説明している良い投稿をしています: https://blog.codinghorror.com/primary-keys-ids-versus-guids/。
開発に関連するほとんどすべてのことと同様に、パフォーマンスの向上を目指す場合、正解は 1 つではありません。それは、達成しようとしていることと、ソリューションをどのように実装しているかによって大きく異なります。唯一の正しい答えは、目標を達成していることを確認するために、パフォーマンス メトリックに対してテスト、テスト、およびテストを繰り返すことです。
[編集] @Matt、GUID/ID の議論についてさらに調査を行った後、この投稿に出会いました。前述したように、正解も不正解もありません。それは、特定の実装ニーズによって異なります。しかし、GUID を主キーとして使用する正当な理由がいくつかあります。
たとえば、「ホットスポット」として知られる問題があり、テーブル内のデータの特定のページが比較的高い通貨競合にさらされています。基本的に、テーブル上のほとんどのトラフィック (したがってページ レベルのロック) は、テーブルの最後の小さな領域で発生します。IDENTITY は連番ジェネレーターであるため、新しいレコードは常にこのホットスポットに移動します。これらの挿入は、挿入先のページ (ホットスポット) で排他的なページ ロックを必要とするため、面倒です。これにより、ページ ロック メカニズムのおかげで、テーブルへのすべての挿入が効果的にシリアル化されます。一方、NewID() はホットスポットの影響を受けません。NewID() 関数を使用して生成された値は、挿入の短いバースト (複数行の挿入中など、関数が非常に迅速に呼び出される場合) に対してのみシーケンシャルです。
また、挿入物がランダムに分散されるため、ページ分割の可能性が大幅に減少します。ページがあちこちに分割されている間はそれほど悪くはありませんが、効果はすぐに加算されます. IDENTITY を使用すると、ページ フィル ファクターはチューニング メカニズムとしてはほとんど役に立たず、100% に設定することもできます。行は最後のページ以外には挿入されません。NewID() を使用すると、Fill Factor をパフォーマンスを有効にするツールとして実際に利用できます。Fill Factor を、インデックスの再構築間の推定ボリューム増加に近似するレベルに設定し、dbcc reindex を使用してオフピーク時に再構築をスケジュールすることができます。これにより、オフピーク時までページ分割のパフォーマンス ヒットが効果的に遅延されます。
問題のテーブルのレプリケーションを有効にする必要があると思われる場合でも、PK を一意の識別子にして、GUID フィールドに ROWGUIDCOL のフラグを立てることもできます。レプリケーションには、この属性を持つ一意の値を持つ guid フィールドが必要であり、存在しない場合は追加されます。適切なフィールドが存在する場合は、そこにあるフィールドが使用されます。
PK に GUID を使用することのもう 1 つの大きな利点は、このサーバーによって生成されたすべての値だけでなく、すべてのコンピューターによって生成されたすべての値の間で値が実際に一意であることが保証されるという事実です。 、またはクライアント マシン。ほとんどすべての最新の言語には、現在有効な GUID を生成する機能があります。.NET では、System.Guid.NewGuid を使用できます。これは、特にキャッシュされたマスター/ディテール データセットを扱う場合に非常に便利です。コミットする前にレコードを関連付けるためだけに、クレイジーな一時キーイング スキームを使用する必要はありません。レコードの作成時に、新しい各レコードの永続的なキー値に対して、オペレーティング システムから完全に有効な新しい Guid をフェッチするだけです。
http://forums.asp.net/t/264350.aspx