0

Hướng dẫn cách cài đặt pg_trgm và tạo Trigram Index (GIN/GiST) cho một bảng trong PostgreSQL bằng câu lệnh SQL.

Để cài đặt và sử dụng Trigram Index trong PostgreSQL, bạn cần thực hiện hai bước chính: kích hoạt extension pg_trgm và tạo index trên cột mong muốn.

1. Kích hoạt module pg_trgm

Trước khi có thể tạo Trigram Index, bạn cần bật extension này cho database của mình. Lệnh này chỉ cần chạy một lần duy nhất.

SQL

CREATE EXTENSION IF NOT EXISTS pg_trgm;

2. Tạo Trigram Index (GIN hoặc GiST)

Khi tạo index, điều bắt buộc là bạn phải chỉ định operator class (gin_trgm_ops hoặc gist_trgm_ops) để PostgreSQL biết cần băm chuỗi thành các trigram thay vì sử dụng thuật toán B-Tree mặc định.

Tùy chọn 1: Sử dụng GIN Index (Khuyên dùng)

GIN (Generalized Inverted Index) mang lại tốc độ truy vấn (Read) nhanh nhất, đánh đổi lại là dung lượng lưu trữ lớn hơn và tốc độ ghi (Insert/Update) chậm hơn. Đây là lựa chọn tốt nhất cho các bảng dữ liệu ít bị thay đổi nhưng được tìm kiếm thường xuyên.

SQL

CREATE INDEX idx_table_column_gin 
ON ten_bang 
USING GIN (ten_cot gin_trgm_ops);

Tùy chọn 2: Sử dụng GiST Index

GiST (Generalized Search Tree) tốn ít bộ nhớ hơn và cho tốc độ cập nhật dữ liệu (Write) nhanh hơn GIN. Nó phù hợp với các bảng có tần suất Insert/Update liên tục, hoặc khi bạn cần tối ưu các truy vấn tìm kiếm độ tương đồng (Similarity Search) theo dạng nearest-neighbor.

SQL

CREATE INDEX idx_table_column_gist 
ON ten_bang 
USING GiST (ten_cot gist_trgm_ops);

3. Kiểm tra hiệu quả của Index

Sau khi tạo xong, bạn nên kiểm tra xem bộ tối ưu hóa truy vấn (Query Planner) của PostgreSQL có thực sự sử dụng index bạn vừa tạo hay không bằng lệnh EXPLAIN ANALYZE.

SQL

EXPLAIN ANALYZE 
SELECT * FROM ten_bang 
WHERE ten_cot ILIKE '%tu_khoa%';

Nếu trong kết quả trả về xuất hiện dòng chữ Bitmap Index Scan on idx_table_column_gin, điều đó chứng tỏ truy vấn của bạn đã bỏ qua Full Table Scan và đang tận dụng Trigram Index thành công.

Lưu ý: Nếu bảng của bạn có quá ít dữ liệu (vài trăm dòng), PostgreSQL có thể vẫn chọn Full Table Scan vì nó đánh giá việc quét trực tiếp trên bảng nhỏ sẽ nhanh hơn là đọc qua Index.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí