文字が変化する列に一意の制約があり、その長さは主に約600ですが、1000万になる可能性があります。
B-Trees について読みましたが、インデックスが消費するディスク領域の大きさ、またはそのような大きなサイズの値がインデックスのパフォーマンスを妨げるかどうかを判断できません。
このように長さが長くなる可能性がある文字可変列のBツリーインデックスがディスク容量と時間に与える影響は何ですか?
Postgresでは、一意の制約は一意のBツリーインデックスで実装されます。 ドキュメントごと:
一意の制約を追加すると、制約で使用される列または列のグループに一意のbtreeインデックスが自動的に作成されます。
インデックスは、テーブルと同じ基本的な保存メカニズム、つまりデータページの配列を使用します。インデックスには、いくつかのマイナーな追加機能があります。 ドキュメントごと:
テーブルでは、アイテムは行です。インデックスでは、アイテムはインデックスエントリです。
すべてのテーブルとインデックスは、固定サイズ(通常は8 kBですが、サーバーのコンパイル時に別のページサイズを選択できます)のページの配列として格納されます。
インデックスエントリの最大サイズはデータページの3分の1です。これについてPeter Eisentrautを引用します。
PostgreSQLの主キーの長さの制限
それは2730バイト(または少し少ない)です。 UNIQUE
制約が不可能であることを意味します。
ハッシュ値を持つ冗長な列を追加し、thatに一意のインデックスを作成することを検討します。
組み込みの関数 md5()
を使用するか、巨大な値に対してより効率的なものを使用できます。
パフォーマンスに焦点を当てた関連ソリューションは次のとおりです:
インデックスの最大行サイズエラー