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

Postgres và chỉ mục trên các khóa ngoại và khóa chính

PostgreSQL tự động tạo chỉ mục trên các khóa chính và các ràng buộc duy nhất, nhưng không phải ở phía tham chiếu của các mối quan hệ khóa ngoài.

Khi Pg tạo một chỉ mục ngầm, nó sẽ phát ra một NOTICE thông báo cấp mà bạn có thể thấy trong psql và / hoặc nhật ký hệ thống, vì vậy bạn có thể biết khi nào điều đó xảy ra. Các chỉ mục được tạo tự động hiển thị trong \d đầu ra cho một bảng cũng vậy.

Tài liệu về các chỉ mục duy nhất cho biết:

PostgreSQL tự động tạo chỉ mục cho mỗi ràng buộc duy nhất và ràng buộc khóa chính để thực thi tính duy nhất. Do đó, không cần thiết phải tạo chỉ mục một cách rõ ràng cho các cột khóa chính.

và tài liệu về các ràng buộc cho biết:

Vì việc XÓA một hàng khỏi bảng được tham chiếu hoặc CẬP NHẬT cột được tham chiếu sẽ yêu cầu quét bảng tham chiếu đối với giá trị cũ, nên việc lập chỉ mục các cột tham chiếu đó thường là một ý kiến ​​hay. Bởi vì điều này không phải lúc nào cũng cần thiết và có nhiều lựa chọn có sẵn về cách lập chỉ mục, việc khai báo móc khóa nước ngoài không tự động tạo chỉ mục trên các cột tham chiếu.

Do đó, bạn phải tự tạo chỉ mục trên khóa ngoại nếu muốn.

Lưu ý rằng nếu bạn sử dụng khóa chính-ngoại, như 2 FK làm PK trong bảng M-to-N, bạn sẽ có một chỉ mục trên PK và có thể không cần tạo thêm bất kỳ chỉ mục nào.

Mặc dù việc tạo chỉ mục trên (hoặc bao gồm) các cột khóa ngoại phía tham chiếu của bạn thường là một ý tưởng hay, nhưng điều này không bắt buộc. Mỗi chỉ mục bạn thêm làm chậm hoạt động DML xuống một chút, vì vậy bạn phải trả chi phí hiệu suất cho mỗi INSERT , UPDATE hoặc DELETE . Nếu chỉ mục hiếm khi được sử dụng, nó có thể không đáng có.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giải thích lệnh PostgreSQL VALUES

  2. Thúc đẩy hiệu suất cho PostgreSQL với HAProxy

  3. Bỏ qua hoàn toàn múi giờ trong Rails và PostgreSQL

  4. ngủ đông không thể nhận giá trị trình tự tiếp theo

  5. Hiển thị hình ảnh từ cơ sở dữ liệu PostgreSQL, bytea