PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Lập chỉ mục SQL trên varchar

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để liệt kê các bản ghi có ngày từ 10 ngày qua?

  2. Tìm chuỗi điểm số hoàn hảo dài nhất trên mỗi người chơi

  3. Giải thích chi tiết hơn về đề xuất hiệu suất điều kiện JOIN so với LEFT JOIN và WHERE

  4. Tìm kiếm trong 300 triệu địa chỉ với pg_trgm

  5. Khóa đọc hàng PostgreSQL