SQL Server テーブルにデータ入力フィールドがある場合、効率的にインデックスを作成できますか?

SQL Server テーブルにデータ入力フィールドがある場合、効率的にインデックスを作成できますか?

バックエンドの SQL Server データベースがあります。クラスター化インデックスが最も効率的ですが、効率を上げるためにページを物理的に順序付けていると理解しています。そのため、ユーザーが入力するフィールドの場合は、新しいレコードが追加されるたびに、テーブル全体を再構築する必要があります。

これは効率的ではありません。では、この場合、フィールドに通常のインデックスを設定することは効率的でしょうか? それとも、インデックスを設定せずにそのままにしておくべきでしょうか?

答え1

一般的なルールとして、クラスター化インデックスは ID フィールドにのみ使用する必要があります。自動番号は増え続けるため最適です。ID 列の更新は、1000 年に 1 回程度行う必要がありますが、アプリケーションの実行時には絶対に行わないでください。そのため、標準の DML ステートメントを使用してページ コンテンツを並べ替える必要はありません。

これらの制約内では、クラスター化インデックスは非常に効率的ですが、ご指摘のとおり、誤って使用すると、インデックス付きフィールドでの DML ステートメントのパフォーマンスに大きな悪影響を与える可能性があります。

したがって、簡単に答えると、ユーザーが入力したフィールドにはクラスター化インデックスを使用しないでください。

非クラスター化インデックスについては、使用方法に応じて大きな利点にも、欠点にもなり得ます。NCI は 1 行または少数の行を取得する場合に非常に便利ですが、フィールドが追加されるたびにインデックスのサイズが大きくなるため、複雑な多フィールド インデックスや、クエリを少なくとも多数の行に解決することしかできないインデックスでは利点が得られず、多くの場合、価値よりも負担が大きくなります。

関連情報