Chỉ mục một cột
Postgres có thể kết hợp nhiều chỉ mục rất hiệu quả trong một truy vấn duy nhất với quét chỉ mục bitmap . Hầu hết thời gian, chỉ mục chọn lọc nhất được chọn (hoặc hai, kết hợp với quét chỉ mục bitmap) và phần còn lại được lọc. Khi tập hợp kết quả đủ hẹp, việc quét nhiều chỉ mục hơn sẽ không hiệu quả.
Chỉ mục nhiều cột
Vẫn nhanh hơn để có một chỉ mục đa cột đối sánh hoàn hảo, nhưng không phải theo thứ tự độ lớn.
Vì bạn muốn bao gồm một loại mảng Tôi khuyên bạn nên sử dụng GIN mục lục. AFAIK, thiếu các lớp toán tử cho các chỉ mục GiST có mục đích chung trên kiểu mảng. (Ngoại lệ là intarray
cho integer
mảng.)
Để bao gồm integer
, trước tiên hãy cài đặt mô-đun bổ sung btree_gin
, cung cấp các lớp toán tử GIN cần thiết. Chạy một lần cho mỗi cơ sở dữ liệu :
CREATE EXTENSION btree_gin;
Sau đó, bạn sẽ có thể tạo chỉ mục đa cột của mình:
CREATE INDEX tbl_abc_gin_idx ON tbl USING GIN(a, b, c);
Thứ tự của các cột chỉ mục không liên quan đến các chỉ mục GIN. Hướng dẫn sử dụng:
Chỉ mục GIN nhiều cột có thể được sử dụng với các điều kiện truy vấn liên quan đến nhiều tập hợp con của các cột của chỉ mục. Không giống như B-tree hoặc GiST, hiệu quả tìm kiếm chỉ mục là như nhau bất kể điều kiện truy vấn sử dụng (các) cột chỉ mục nào.
Tìm kiếm hàng xóm gần nhất
Vì bạn đang bao gồm một geometry
nhập, rất có thể bạn muốn thực hiện tìm kiếm hàng xóm gần nhất mà bạn cần GiST mục lục. Trong trường hợp này, tôi đề nghị hai chỉ mục:
CREATE INDEX tbl_ac_gist_idx ON tbl USING GiST(a, c); -- geometry type
CREATE INDEX tbl_bc_gin_idx ON tbl USING GIN(b, c);
Bạn có thể thêm integer
cột c
cho một trong hai hoặc cả hai. Điều đó phụ thuộc. Để làm được điều đó, bạn cần btree_gin
hoặc btree_gist
hoặc cả hai, tương ứng.