Đối với bất kỳ truy vấn cụ thể, việc sử dụng một chỉ số phụ thuộc vào chi phí của việc sử dụng chỉ số so sánh với một quét tuần tự
thường các nhà phát triển nghĩ rằng vì có một chỉ số, một truy vấn nên chạy nhanh hơn, và nếu truy vấn chạy chậm, chỉ mục là giải pháp. Điều này thường xảy ra khi truy vấn sẽ trả về một vài bộ dữ liệu. Nhưng khi số lượng bộ dữ liệu trong kết quả tăng lên, chi phí sử dụng chỉ mục có thể tăng lên.
Bạn đang sử dụng postgres. Postgres không hỗ trợ phân cụm quanh một thuộc tính đã cho. Điều đó có nghĩa là postgres, khi đối mặt với một truy vấn phạm vi (thuộc loại att> a và att < b) cần tính toán số lượng bộ dữ liệu trong kết quả (đảm bảo bạn hút cơ sở dữ liệu thường xuyên) và chi phí sử dụng chỉ số so với quét tuần tự. sau đó nó sẽ quyết định sử dụng phương pháp nào.
bạn có thể kiểm tra quyết định này bằng cách chạy
EXPLAIN ANALYZE <query>;
trong psql. Nó sẽ cho bạn biết nếu nó sử dụng một chỉ mục hay không. Nếu bạn thực sự, thực sự muốn sử dụng các chỉ mục thay vì quét tuần tự (đôi khi cần) và bạn thực sự biết bạn đang làm gì, bạn có thể thay đổi chi phí quét tuần tự trong hằng số kế hoạch hoặc vô hiệu hóa quét tuần tự có lợi cho bất kỳ phương pháp nào khác. Xem trang này để các chi tiết:
http://www.postgresql.org/docs/9.1/static/runtime-config-query.html
Hãy chắc chắn rằng bạn duyệt phiên bản đúng của tài liệu.
--dmg
Bạn có thể đăng kế hoạch giải thích, tổng số hàng và giá trị chính xác "rất chậm" không? –
Vui lòng đọc http://stackoverflow.com/tags/postgresql-performance/info (và trang wiki Truy vấn SlowQueryQuestions) sau đó cập nhật câu hỏi của bạn với kết quả 'giải thích phân tích' phù hợp và báo cáo lại. Vì bạn đang sử dụng trình tạo truy vấn, bạn có thể cần phải sử dụng 'auto_explain' hoặc để truy vấn nhật ký và thực hiện lại chúng bằng tay. –
Vui lòng đăng giản đồ và loại truy vấn chậm. Câu hỏi vì nó được phân tích không thể trả lời một cách hợp lý ... –