Visual Studio 2010 で ASP.NET Web サイトを開発しています (Service Pack 1 を使用して、どうもありがとうございました)。SQL Server 2008 で .NET の組み込みのメンバーシップ プロバイダーとロール プロバイダーを利用したいと考えています。
現在、私は非常に長い間 Microsoft テクノロジの開発に携わっており、業界で最も優れた SQL Server DBA の何人かと交流を深めてきました。次のようなデータベース テーブルを作成するときは、主キーとして GUIDS を使用しないようにと、全員が私に言いました。
- 非常に高いレコード数を持っています。
- 大量の挿入と削除があります。
理由: 主キーがクラスター化インデックスであるためです。
これは基本的に、テーブルに挿入される各レコードがインデックスの制約に従う必要があることを意味します。したがって、インデックスが ASC で並べ替えられている場合、新しく生成された GUID を持つレコードは、適切な順序で問題のデータ テーブルに物理的に押し込まれなければなりません。
これは、数千件程度のレコードしかないテーブルでは問題ありません。SQL Server は、ほんの一握りを再配置するだけで済みます。ただし、データ テーブルに数百万のレコードがあり、行 216 に新しいレコードを挿入する必要があることがわかった場合は、完了するまでにかなりの時間がかかる可能性があります (Web 標準によると)。新しい行を挿入するには、これらすべての行を物理的に下に移動する必要があります。
だから私の質問は単にこれです。Microsoft と、私たちが知っていて愛するすべての DBS は、主キーとしての GUID に NO と言ってきました... ASPNET_REGSQL ツールは、GUID を主キーとして使用してテーブルを作成するのはなぜですか?
または、何か不足していますか?2008 年の SQL プロファイラー エンジンに、GUIDS をタスクと見なさない新機能はありますか?