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

Tìm kiếm trên các chỉ mục biểu thức

Nó giống như bạn đọc từ jjanes ở nơi khác:một chỉ mục biểu thức chỉ được xem xét nếu biểu thức được khớp chính xác trong vị từ truy vấn. Công cụ lập kế hoạch truy vấn Postgres không phải là AI. Nó sẽ nhanh chóng đánh bại mục đích thực hiện các truy vấn nhanh chóng nếu việc lập kế hoạch cho chúng mất quá nhiều thời gian.

Bạn có thể tối ưu hóa chỉ mục của mình một chút, nếu đó là điều an ủi. left() đơn giản và nhanh hơn substring() :

CREATE INDEX record_changes_log_detail_old_value_ix_btree
ON record_changes_log_detail (left(old_value,1024) text_pattern_ops);

Ngoài ra, có kích thước hàng tối đa là 2704 byte đối với chỉ mục btree, không phải là "giới hạn 2172 ký tự trên cây B" .

Quan trọng nhất, chỉ để kiểm tra bình đẳng, như câu hỏi của bạn đề xuất, chỉ mục btree trên giá trị băm bằng cách sử dụng md5(old_value) hoặc hashtext(old_value) sẽ là nhiều hiệu quả hơn. Nếu bạn làm vậy, hãy nhớ bảo vệ khỏi xung đột băm như vậy:

SELECT *
FROM   record_changes_log_detail 
WHERE  hashtext(old_value) = hashtext('Gold Kerrison Neuro')
AND    old_value = 'Gold Kerrison Neuro';

Vị từ đầu tiên cho phép bạn truy cập chỉ mục nhanh chóng. Thứ hai loại trừ dương tính giả. Va chạm nên cực kỳ hiếm. Nhưng có thể. Và khả năng sẽ tăng lên theo kích thước của bảng.

Có liên quan:

  • Truy vấn SELECT với DISTINCT trên cấu trúc bảng cho đồ thị rất chậm
  • Loại dữ liệu tối ưu cho trường MD5 là gì?
  • Tìm kiếm toàn văn trong CouchDB

Hoặc một chỉ mục băm như bạn đã tự xem xét:

  • Tại sao chỉ mục băm Postgres 11 lại lớn như vậy?

(Ở đây bạn không cần phải lo lắng về xung đột băm; được xử lý nội bộ.)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuỗi ký tự và ký tự thoát trong postgresql

  2. Sắp xếp các giá trị rỗng sau tất cả các giá trị khác, ngoại trừ giá trị đặc biệt

  3. Cách hoạt động của to_char () trong PostgreSQL

  4. Lược đồ Django và postgresql

  5. Sự khác biệt giữa postgres và postgresql_psycopg2 làm công cụ cơ sở dữ liệu cho django là gì?