Tombol pada VARCHAR
kolom bisa sangat panjang yang menghasilkan lebih sedikit catatan per halaman dan lebih mendalam (lebih banyak level di B-Tree
). Indeks yang lebih panjang juga meningkatkan rasio kehilangan cache.
Berapa banyak string dalam peta rata-rata untuk setiap bilangan bulat?
Jika jumlahnya relatif sedikit, Anda dapat membuat indeks hanya pada kolom integer dan PostgreSQL
akan melakukan penyaringan halus pada catatan:
CREATE INDEX ix_mytable_assoc ON mytable (assoc);
SELECT floatval
FROM mytable
WHERE assoc = givenint
AND phrase = givenstring
Anda juga dapat mempertimbangkan untuk membuat indeks pada hash string:
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?
Setiap hash hanya 16
byte, sehingga kunci indeks akan jauh lebih pendek sambil tetap mempertahankan selektivitas dengan hampir sempurna.