3

今日SQLServerデータベースのインデックスを確認していたところ、画像データ用のvarbinary(max)型の列を持つ比較的小さい(非常に古い)テーブル(3250行)に気づきました。

主キーは非クラスター化インデックスであり、クラスター化された別のインデックス(ユーザーID上にあり、削除されています)があります。

繰り返しになりますが、これは非常に古いテーブルであり、このテーブルが作成されたときにここにいた人はもういません。

それで、それをこのように設定する理由はありますか?そして、私はそれを変更する必要がありますか?そして、もし私がそうするべきなら、私が注意しなければならないことはありますか?

4

1 に答える 1

5

インデックスはユース ケース ベースです。PK は実質的に PK のインデックスであり (インデックスで一意性を強制します)、クエリで PK が使用される場所で使用されます。クエリで使用される列が PK に依存せず、他の列の組み合わせを使用するケースは容易に想像できます。

このユースケースが唯一のものではなく、主要なものだったと想像してみてください。この場合、設計者は、使用頻度の低いユース ケースではなく、このユース ケースにクラスタリングすることができます。

あなたへの私の提案はこれです:

  1. 元の設計は、最適化などの非常に正当な理由で存在する可能性があるため、物事がそのまま存在する理由を理解せずに変更を加えないでください。
  2. システム設計と運用特性を念頭に置いてインデックスとクラスタリングを設計し、やみくもに何かを追加しないでください。これは、「空中の指」オプションだけでなく、確固たる証拠を使用して行う必要があります。

私を信じてください、私はそれに噛まれてこれを学びました。私は、変更が機能している証拠と他のものを壊していない証拠を提供するテストなしに、物事を変更しないようにしています。これは、レガシー システムを使用する場合に重要なことです。

于 2013-01-07T22:04:11.673 に答える