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ó.