1. ホーム
  2. sql

[解決済み] クラスタ化インデックスは一意でなければならないのですか?

2023-04-23 03:26:31

質問

クラスタ化されたインデックスが一意でない場合、何が起こりますか? 挿入された行がある種の "オーバーフロー" ページに流れるため、パフォーマンスが低下する可能性がありますか?

一意にすることはできますか、そしてもしそうならどのようにしますか? また、その場合はどのように行いますか?

私は現在、クラスタ化インデックスを使用してテーブルを論理的な部分に分割していますが、パフォーマンスはあまり良くありません。 というアドバイスをもらいました。 を受け取りました。それについてセカンドオピニオンが欲しいのです。

どのように解決するのですか?

彼らは を持つ である必要はありませんが、確かにそれは推奨されます。

一意でないカラムにCIを作りたいというシナリオにはまだ遭遇したことがありません。

もし、あなたが 一意でないカラムにCIを作成する

クラスタ化されたインデックスがユニークインデックスでない場合 インデックスでない場合、SQL Server は重複する という内部的に生成された値を追加することで、重複するキーを一意にします。 と呼ばれる内部で生成される値を追加することで、重複するキーを一意にします。

これはパフォーマンスの悪化につながるのでしょうか?

を追加する 一意性 を追加すると、確かに計算と保存に多少のオーバーヘッドが生じます。

このオーバーヘッドが顕著になるかどうかは、いくつかの要因に依存します。

  • テーブルが含むデータの量。
  • 挿入の割合はどうなっているか。
  • CIがselectで使用される頻度(カバーインデックスが存在しない場合、かなりの頻度で使用されます)。

Edit

コメントでRemusが指摘したように、ユニークでないCIを作成することが合理的な選択であるユースケースは存在します。