Ngoài những gì Justin Cave đã viết, kể từ PostgreQuery 9.1, bạn có thể tăng tốc bất kỳ tìm kiếm nào với LIKE
( ~~
) hoặc ILIKE
( ~~*
) và các biểu thức chính quy cơ bản khớp ( ~
). Sử dụng các lớp toán tử được cung cấp bởi mô-đun pg_trgm với chỉ số GIN hoặc GiST để tăng tốc các LIKE
biểu thức không được neo trái. Để cài đặt tiện ích mở rộng, hãy chạy một lần cho mỗi cơ sở dữ liệu:
CREATE EXTENSION pg_trgm;
Tạo một chỉ mục của biểu mẫu
CREATE INDEX tbl_col_gin_trgm_idx ON tbl USING gin (col gin_trgm_ops);
Hoặc là:
CREATE INDEX tbl_col_gist_trgm_idx ON tbl USING gist (col gist_trgm_ops);
Tạo và duy trì chỉ số GIN hoặc GiST mang lại chi phí, nhưng nếu bảng của bạn không được viết nhiều, đây là một tính năng tuyệt vời cho bạn.
Depesz đã viết một bài báo xuất sắc trong blog của mình về tính năng mới.
GIN hay GiST?
Hai trích dẫn từ hướng dẫn sẽ cung cấp một số hướng dẫn
Sự lựa chọn giữa lập chỉ mục GiST và GIN phụ thuộc vào đặc tính hiệu suất tương đối của GiST và GIN, được thảo luận ở nơi khác. Theo nguyên tắc thông thường, chỉ mục GIN tìm kiếm nhanh hơn chỉ số GiST, nhưng chậm hơn để xây dựng hoặc cập nhật; vì vậy GIN phù hợp hơn với dữ liệu tĩnh và GiST cho dữ liệu thường được cập nhật.
Nhưng đối với loại truy vấn "hàng xóm gần nhất" với toán tử khoảng cách <->
:
Điều này có thể được thực hiện khá hiệu quả bởi các chỉ mục GiST, nhưng không phải bởi các chỉ mục GIN.