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

Chỉ mục tổng hợp có ba khóa, điều gì sẽ xảy ra nếu tôi truy vấn bỏ qua khóa ở giữa?

Postgres có thể sử dụng các cột không đứng đầu trong chỉ mục b-tree, nhưng ở chế độ kém hiệu quả hơn nhiều.

Nếu cột đầu tiên rất chọn lọc (chỉ vài hàng cho mỗi A ) thì bạn sẽ khó nhận thấy sự khác biệt về hiệu suất vì cả hai phương pháp truy cập (thậm chí là quét tuần tự trên tập hợp đã giảm) là rẻ. Lần truy cập hiệu suất tăng lên với số lượng hàng trên mỗi A .

Đối với trường hợp bạn mô tả, tôi khuyên bạn nên tạo chỉ mục trên (A, C, B) hoặc (C, A, B) (chỉ cần đảm bảo rằng B đến cuối cùng) để tối ưu hóa hiệu suất. Bằng cách này, bạn có được hiệu suất tốt nhất cho các truy vấn trên (A, B, C) và trên (A, C) giống nhau.

Không giống như chuỗi các cột trong chỉ mục, chuỗi các vị từ trong truy vấn không quan trọng.

Chúng tôi đã thảo luận rất chi tiết về vấn đề này trên dba.SE:

Lưu ý rằng nó không vấn đề cho dù bạn dẫn đầu bằng A, C hoặc C, A đối với trường hợp trong tay:

Ngoài ra còn có một số cân nhắc khác, nhưng câu hỏi của bạn không có tất cả các chi tiết liên quan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Division (/) không đưa ra câu trả lời của tôi trong postgresql

  2. Sắp xếp dấu thời gian (bao gồm cả tương lai) theo khoảng cách tuyệt đối từ bây giờ

  3. Django OneToOneField với trường trống có thể có

  4. Làm cách nào để bạn tạo một người dùng chỉ đọc trong PostgreSQL?

  5. Tự động thêm một cột có nhiều giá trị vào bất kỳ bảng nào bằng cách sử dụng hàm PL / pgSQL