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

Cần hai chỉ mục trên một bảng tham gia HABTM?

Đóng - bạn rất có thể muốn những điều sau:

add_index :person_products, [:person_id, :product_id], :unique => true
add_index :person_products, :product_id

:unique => true là không bắt buộc nghiêm ngặt và việc một người liên kết với sản phẩm nhiều lần có hợp lý hay không. Tôi sẽ nói nếu bạn không chắc, có thể bạn làm muốn :unique cờ.

Lý do cho cấu trúc chỉ mục là tất cả các cơ sở dữ liệu hiện đại có thể thực thi truy vấn trên cả person_id và product_id bằng cách sử dụng chỉ mục đầu tiên bất kể thứ tự được chỉ định trong truy vấn . Ví dụ:

SELECT foo FROM bar WHERE person_id = 1 AND product_id = 2
SELECT foo FROM bar WHERE product_id = 2 AND person_id = 1

được coi như nhau và cơ sở dữ liệu đủ thông minh để sử dụng chỉ mục đầu tiên.

Tương tự như vậy, các truy vấn chỉ sử dụng person_id cũng có thể được chạy bằng cách sử dụng chỉ mục đầu tiên. Các chỉ mục b-tree nhiều cột có thể sử dụng ít cột hơn chúng đã cung cấp với điều kiện chúng được chỉ định từ bên trái của khai báo ban đầu.

Đối với các truy vấn chỉ sử dụng product_id , điều này không thể được thực thi đối với chỉ mục đầu tiên (vì chỉ mục đó được xác định với person_id ở vị trí ngoài cùng bên trái). Do đó, bạn cần một chỉ mục riêng để chỉ cho phép tra cứu trên trường đó.

Thuộc tính chỉ mục cây b-cây nhiều cột cũng mở rộng đến các chỉ mục có số cột cao hơn. Nếu bạn có một chỉ mục trên (person_id, product_id, favorite_color, shirt_size) , bạn có thể sử dụng chỉ mục đó để chạy các truy vấn bằng person_id , (person_id, product_id) , v.v., miễn là thứ tự phù hợp với định nghĩa.



  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ách tách một chuỗi trong PostgreSQL

  2. Postgres - Nhiều liên kết khiến truy vấn của tôi trả về dữ liệu không chính xác

  3. Làm thế nào để lấy bản ghi Đầu tiên và Cuối cùng từ một truy vấn sql?

  4. ::Làm gì trong PostgreSQL?

  5. Tự cấp phép tài khoản người dùng trong PostgreSQL thông qua quyền truy cập ẩn danh không đặc quyền