Các cột được sử dụng để lọc hoặc tham gia (hoặc ở mức độ thấp hơn, sắp xếp ) được quan tâm để lập chỉ mục. Các cột vừa được chọn hầu như không liên quan! Đối với truy vấn sau, chỉ lập chỉ mục trên a và e có thể hữu ích:
SELECT a,b,c,d
FROM tbl_a
WHERE a = $some_value
AND e < $other_value;
Đây, f và có thể là c cũng là ứng cử viên:
SELECT a,b,c,d
FROM tbl_a
JOIN tbl_b USING (f)
WHERE a = $some_value
AND e < $other_value
ORDER BY c;
Sau khi tạo chỉ mục, hãy kiểm tra xem chúng có thực sự hữu ích hay không bằng EXPLAIN ANALYZE
. Đồng thời so sánh thời gian thực hiện có và không có chỉ mục. Xóa và tạo lại chỉ mục nhanh chóng và dễ dàng. Ngoài ra còn có các tham số để thử nghiệm
với EXPLAIN ANALYZE
. Sự khác biệt có thể đáng kinh ngạc hoặc không tồn tại.
Vì các bảng của bạn chỉ được đọc nên việc duy trì chỉ mục rất rẻ. Đó chỉ là một câu hỏi về dung lượng ổ đĩa.
Nếu bạn thực sự muốn biết mình đang làm gì, hãy bắt đầu bằng cách đọc tài liệu .
Nếu bạn không biết những truy vấn nào sẽ xảy ra ...
-
Hãy thử ghi lại các truy vấn đủ để tìm các trường hợp sử dụng điển hình. Truy vấn nhật ký với tham số
log_statement = all
cho điều đó. Hoặc chỉ ghi lại các truy vấn chậm bằng cách sử dụnglog_min_duration_statement
. -
Tạo chỉ mục điều đó có thể hữu ích và hãy kiểm tra số liệu thống kê sau một thời gian để xem những gì thực sự được sử dụng. PostgreSQL có toàn bộ cơ sở hạ tầng để theo dõi thống kê . Một cách thuận tiện để nghiên cứu thống kê (và nhiều tác vụ khác) là pgAdmin nơi bạn có thể chọn bảng / chức năng / chỉ mục của mình và nhận tất cả dữ liệu trên tab "thống kê" trong trình duyệt đối tượng (cửa sổ chính).
-
Tiếp tục như mô tả ở trên để xem liệu các chỉ mục đang sử dụng có thực sự tăng tốc mọi thứ hay không.
-
Nếu người lập kế hoạch truy vấn nên chọn sử dụng một hoặc nhiều chỉ mục của bạn nhưng không có hoặc không có tác dụng phụ thì thiết lập của bạn có thể có vấn đề và bạn cần nghiên cứu khái niệm cơ bản về tối ưu hóa hiệu suất:chân không, phân tích, tham số chi phí, sử dụng bộ nhớ, ...