VARCHAR
のキー 列が非常に長くなる可能性があるため、ページあたりのレコード数が少なくなり、深さが増します(B-Tree
のレベルが増えます) )。インデックスが長くなると、キャッシュミス率も高くなります。
平均していくつの文字列が各整数にマップされますか?
比較的少ない場合は、整数列とPostgreSQL
にのみインデックスを作成できます。 レコードに対して細かいフィルタリングを行います:
CREATE INDEX ix_mytable_assoc ON mytable (assoc);
SELECT floatval
FROM mytable
WHERE assoc = givenint
AND phrase = givenstring
文字列ハッシュにインデックスを作成することも検討できます:
CREATE INDEX ix_mytable_md5 ON mytable (DECODE(MD5(phrase), 'HEX'));
SELECT floatval
FROM mytable
WHERE DECODE(MD5(phrase), 'HEX') = DECODE(MD5('givenstring'), 'HEX')
AND phrase = givenstring -- who knows when do we get a collision?
各ハッシュは16
のみです バイト長なので、選択性をほぼ完全に維持しながら、インデックスキーははるかに短くなります。