Có cách nào để tôi có thể tìm ra cách tốt nhất để biết chỉ mục nào sẽ tạo cho bảng không?
WHERE
mệnh đề.
Có cách nào để tôi có thể tìm ra cách tốt nhất để biết chỉ mục nào sẽ tạo cho bảng không?
WHERE
mệnh đề.
Câu trả lời:
Quy tắc ngắn của ngón tay cái. (Một số trong số này được tạo tự động, nhưng có thể được loại bỏ thủ công sau đó, tùy thuộc vào dbms của bạn. Đừng cho rằng bạn sẽ luôn làm việc trên PostgreQuery.)
Mỗi khóa chính có nghĩa là các khóa chính nhiều cột phải có một chỉ mục duy nhất bao gồm tất cả các cột. PostgreSQL sẽ tự động tạo chỉ mục này nếu bạn khai báo khóa chính nhiều cột.
Có nhiều trường hợp trong đó một chỉ mục nhiều cột cung cấp cho bạn hiệu suất tốt hơn so với một số chỉ mục một cột. Theo dõi các truy vấn chậm và thực hiện kiểm tra để tìm ra cái nào là cái nào.
Giả sử rằng bất kỳ thay đổi nào đối với việc lập chỉ mục sẽ cải thiện một số hoạt động cơ sở dữ liệu và làm suy giảm các hoạt động khác. Tôi thấy hữu ích khi có một tập hợp các câu lệnh SQL mà tôi có thể cấu hình trước và sau khi thực hiện các thay đổi đối với các chỉ mục. Bộ này bao gồm các câu lệnh CHỌN, CHERTN, CẬP NHẬT và XÓA.
Không có sự thay thế nào cho việc nghiên cứu các tài liệu cho các dbms cụ thể của bạn.
Ngoài những gì @Catcall đã cung cấp và thêm một sửa chữa nhỏ:
Gần đây tôi cũng đề cập đến một số điều cơ bản trong câu trả lời liên quan chặt chẽ này về SO .
Các câu trả lời cho đến nay dường như cho thấy bạn cần tạo các chỉ mục trên các khóa chính, nhưng đó không phải là trường hợp trong PostgreQuery (áp dụng ngoại lệ một phần). Tôi trích dẫn hướng dẫn ở đây :
PostgreSQL tự động tạo một chỉ mục duy nhất khi một ràng buộc duy nhất hoặc khóa chính được xác định cho một bảng. Các chỉ số bao gồm các cột tạo nên khóa chính hoặc hạn chế duy nhất (một chỉ số multicolumn, nếu thích hợp), và là cơ chế mà thi hành các hạn chế.
Nhấn mạnh đậm của tôi.
Bạn có thể muốn tạo các chỉ mục bổ sung cho các cột thứ hai hoặc sau của chỉ mục nhiều cột, nhưng cột đầu tiên thường được bao phủ tốt bởi chỉ mục nhiều màu - ngoại trừ khi các cột bổ sung làm cho chỉ mục lớn hơn nhiều. Chúng tôi đã thảo luận rằng rất chi tiết theo câu hỏi liên quan này:
Là một chỉ số tổng hợp cũng tốt cho các truy vấn trên trường đầu tiên?
Các chỉ mục nhiều màu , chỉ mục một phần và chỉ mục trên các biểu thức là các công cụ đặc biệt mạnh mẽ trong PostgreQuery. Vì PostgreQuery 9.2 cũng có các bản quét chỉ lập chỉ mục , tương đương với "bao gồm các chỉ mục" trong các RDBMS khác. Đây không phải là một loại chỉ mục khác, mà là một khả năng mới của RDBMS với các loại chỉ mục hiện có.
Mỗi chỉ số mang chi phí cụ thể , vì vậy không có cách nào xung quanh một số kiến thức cơ bản để thực sự tối ưu hóa việc lập chỉ mục. Chỉ cần tạo ra nhiều chỉ mục có thể gây hại nhiều hơn là tốt. Đặc biệt, các chỉ mục có thể ngăn các bản cập nhật HOT cải thiện hiệu suất.
Nói chung, các hoạt động viết ( DELETE
, UPDATE
) trở nên đắt hơn (nhưng cũng có thể có lợi!), Trong khi các hoạt động đọc ( SELECT
) thường chỉ mang lại lợi ích. Quá nhiều chỉ mục có thể làm cạn bộ nhớ cache để các thao tác đọc thậm chí có thể bị ảnh hưởng.
Cuối cùng, trang Wiki Postgres này về các tính năng bảo trì chỉ mục để tìm các chỉ mục trùng lặp hoặc không sử dụng (trong số những thứ khác).
Có hai lựa chọn.
Câu trả lời cho việc tự làm là khá đầy đủ tài liệu ở đây. Vì vậy, hãy nhìn vào một cái gì đó khác.
PGERO có thể hỗ trợ bạn nếu bạn muốn một số lời khuyên tự động.
Điều đó nói rằng nó có một số thiếu sót.
WHERE
và ORDER BY
, không JOINS
.Kiểm tra video này để biết thêm thông tin .