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

Postgres kết hợp nhiều chỉ mục

Tôi không biết liệu Pg có thể kết hợp chỉ mục GiST và các chỉ mục b-tree thông thường với quét chỉ mục bitmap hay không, nhưng tôi nghi ngờ là không. Bạn có thể nhận được kết quả tốt nhất có thể mà không cần thêm user_id vào chỉ mục GiST của bạn (và do đó làm cho nó lớn hơn và chậm hơn đối với các truy vấn khác không sử dụng user_id ).

Như một thử nghiệm, bạn có thể:

CREATE EXTENSION btree_gist;
CREATE INDEX ix_coords_and_user_id ON test USING GIST (coords, user_id);

có khả năng dẫn đến một chỉ mục lớn, nhưng có thể thúc đẩy truy vấn đó - nếu nó hoạt động. Lưu ý rằng việc duy trì một chỉ mục như vậy sẽ làm chậm đáng kể INSERTUPDATE S. Nếu bạn đánh rơi ix_coords cũ các truy vấn của bạn sẽ sử dụng ix_coords_and_user_id ngay cả khi họ không lọc trên user_id , nhưng nó sẽ chậm hơn ix_coords . Giữ cả hai sẽ làm cho INSERTUPDATE chậm lại thậm chí còn tồi tệ hơn.

Xem btree-gist

( Bị bắt buộc bởi chỉnh sửa đối với câu hỏi làm thay đổi hoàn toàn câu hỏi; khi được viết, người dùng có một chỉ mục đa cột giờ đây họ đã tách thành hai chỉ mục riêng biệt ):

Có vẻ như bạn không lọc hoặc sắp xếp trên user_id , chỉ create_date . Pg sẽ không (không thể?) Chỉ sử dụng thuật ngữ thứ hai của chỉ mục nhiều cột như (user_id, create_date) , nó cũng cần sử dụng mục đầu tiên.

Nếu bạn muốn lập chỉ mục create_date , tạo một chỉ mục riêng cho nó. Nếu bạn sử dụng và cần (user_id, create_date) lập chỉ mục và thường không chỉ sử dụng user_id một mình, hãy xem liệu bạn có thể đảo ngược thứ tự cột hay không. Luân phiên tạo hai chỉ mục độc lập, (user_id)(create_date) . Khi cần cả hai cột, Pg có thể kết hợp hai chỉ mục không phụ thuộc bằng cách sử dụng quét chỉ mục bitmap.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có cách nào để đột nhập vào cơ sở dữ liệu PostgreSQL nếu bạn quên mật khẩu không?

  2. Làm cách nào để thay đổi chủ sở hữu của cơ sở dữ liệu PostgreSql?

  3. Làm cách nào để xử lý dữ liệu được xếp hạng x / y trong PostgreSQL?

  4. PostgreSQL 9.4 - Sử dụng toán tử tùy chỉnh trong ràng buộc EXCLUDE

  5. Câu lệnh SQL đệ quy (Postgresql) - phiên bản đơn giản hóa