主キーに Binary データ型を使用すると、パフォーマンス (またはその他) の問題がありますか? データベースには、これらのキーを使用して定期的に結合される多数の大きなテーブルがあります。インデックスはクラスター化されています。これらは(Identityフィールドとして)自動的にインクリメントできないと思います。
1 に答える
SQL Server では、主キーは既定でクラスター化インデックスのキーでもあります。
主キー自体は一意である必要があり、null 許容ではない必要があります。その他の制限はありません。
ただし、クラスター化インデックス キーはできるだけ短くする必要があります。ほとんどの場合、増加し続ける値も優先されます。その理由は、インデックスの深さがインデックス キーの長さによって直接影響を受けるためです。これは、どのインデックス タイプにも当てはまります。ただし、クラスター化されたインデックス キーは、そのテーブルの他の各インデックス キーに自動的に追加されるため、長いキーの悪影響が倍増します。つまり、ほとんどの場合、INT IDENTITY が適切な選択です。
主キーがクラスター化されていない場合、それを短くすることはそれほど重要ではありません。ただし、結合に使用しています。つまり、おそらく各子テーブルのこのキーにもインデックスがあるため、問題が再び増加します。繰り返しますが、自動的に増加する代理キーはおそらくより良い選択です。
これは、ほとんどの場合ではないにしても、多くの場合に当てはまります。ただし、常に例外があります。ユースケースについて多くの情報を提供していないため、答えは本質的に一般的でなければなりません。どの方法に進むかを決定する前に、実際のデータを使用して、環境内の読み取り操作と変更操作のパフォーマンスを必ずテストしてください。
最後に、4 バイトの BINARY と INT のパフォーマンスはおそらく非常に似ています。増加するバイナリ ソート方法で値が作成されていない場合に見られる違いです。これにより、挿入操作中にページ分割が発生し、書き込みパフォーマンスに影響を与える可能性があります。