最近データベースに問題が発生したため、インデックスの状態を確認し、断片化を減らしようとしています。
アプリには、作成した User オブジェクトに属性を設定するために使用する、BoysNames や GirlsNames などの名前のテーブルがいくつかあります。ここで明らかな属性は性別です。これらのテーブルには、数百から 10,000 の行を含めることができます。
これらのテーブルは次のように構成されています。
Name - nvarchar(50) - PK & Clustered Index
DateCreated - datetime
Sql Server にすべてのテーブルのインデックスを再編成または再構築するように指示すると、ほとんどのテーブルのフラグメント化は 0% になりますが、これらの名前テーブルの一部はすぐに 50% でフラグメント化されます。
これらのテーブルには 2 つの場所でのみアクセスします。
- 1 つ目は、テーブルからすべての名前を選択し、それをメモリに保存して、システムに入ってきた新しいユーザーに対して使用する場合です。これにより、次のようなことができます。 M"}; これはかなり頻繁に起こります。
- 2 つ目は、リストに新しい名前を追加するときに、名前の存在を確認し、存在しない場合は追加します。これはめったに起こりません。
だから私が知る必要があるのは:
この高度な断片化が問題を引き起こしているのでしょうか? 再編成/再構築の直後に 50% に設定されているインデックスの断片化を 0% に減らすにはどうすればよいですか?
int を主キーとして使用して Name にインデックスを設定する必要がありましたか、それとも nvarchar が主キーとして正しい選択でしたか?