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

Chỉ mục đa cột trên 3 trường có kiểu dữ liệu không đồng nhất

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ánh xạ văn bản PostgreSQL [] [] kiểu và kiểu Java

  2. Điều kiện đếm ở đâu PostgreSQL

  3. Thiếu `pg_tblspc` sau khi cài đặt phiên bản OS X mới nhất (Yosemite hoặc El Capitan)

  4. Làm thế nào để sử dụng ANY thay vì IN trong mệnh đề WHERE với Rails?

  5. Cách tạo mảng trong PostgreSQL