Các phím trên VARCHAR
cột có thể rất dài dẫn đến ít bản ghi hơn trên mỗi trang và nhiều độ sâu hơn (nhiều cấp hơn trong B-Tree
). Các chỉ mục dài hơn cũng làm tăng tỷ lệ bỏ lỡ bộ nhớ cache.
Có bao nhiêu chuỗi trong ánh xạ trung bình đến mỗi số nguyên?
Nếu có tương đối ít, bạn chỉ có thể tạo chỉ mục trên cột số nguyên và PostgreSQL
sẽ thực hiện lọc tốt các bản ghi:
CREATE INDEX ix_mytable_assoc ON mytable (assoc);
SELECT floatval
FROM mytable
WHERE assoc = givenint
AND phrase = givenstring
Bạn cũng có thể xem xét việc tạo chỉ mục trên chuỗi băm:
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?
Mỗi băm chỉ là 16
dài byte, vì vậy các khóa chỉ mục sẽ ngắn hơn nhiều trong khi vẫn bảo toàn tính chọn lọc gần như hoàn hảo.