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

Làm cách nào để buộc Postgres sử dụng một chỉ mục cụ thể?

Giả sử bạn đang hỏi về tính năng "gợi ý chỉ mục" phổ biến được tìm thấy trong nhiều cơ sở dữ liệu, PostgreSQL không cung cấp tính năng như vậy. Đây là một quyết định có ý thức của nhóm PostgreSQL. Bạn có thể tìm thấy tổng quan tốt về lý do tại sao và những gì bạn có thể làm thay vào đó tại đây. Về cơ bản, lý do là đó là một cuộc tấn công hiệu suất có xu hướng gây ra nhiều vấn đề hơn sau này khi dữ liệu của bạn thay đổi, trong khi trình tối ưu hóa của PostgreSQL có thể đánh giá lại kế hoạch dựa trên số liệu thống kê. Nói cách khác, kế hoạch truy vấn tốt ngày nay có thể không phải là kế hoạch truy vấn tốt cho mọi thời đại và các gợi ý chỉ mục buộc phải có một kế hoạch truy vấn cụ thể mọi lúc.

Là một chiếc búa rất cùn, hữu ích cho việc kiểm tra, bạn có thể sử dụng enable_seqscanenable_indexscan thông số. Xem:

  • Kiểm tra việc sử dụng chỉ mục
  • enable_ tham số

Những thứ này không phù hợp để sử dụng trong quá trình sản xuất . Nếu bạn gặp vấn đề với lựa chọn kế hoạch truy vấn, bạn nên xem tài liệu để theo dõi các vấn đề về hiệu suất truy vấn. Đừng chỉ đặt enable_ params và bước đi.

Trừ khi bạn có một lý do chính đáng để sử dụng chỉ mục, Postgres có thể đang đưa ra lựa chọn chính xác. Tại sao?

  • Đối với các bảng nhỏ, việc quét tuần tự sẽ nhanh hơn.
  • Postgres không sử dụng chỉ mục khi các kiểu dữ liệu không khớp đúng cách, bạn có thể cần phải bao gồm các phôi thích hợp.
  • Cài đặt lập kế hoạch của bạn có thể đang gây ra sự cố.

Xem thêm bài đăng trên nhóm tin cũ này.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tự động chuyển đổi dự phòng cơ sở dữ liệu Moodle PostgreSQL

  2. Cần tìm gì nếu Bản sao PostgreSQL của bạn đang bị trễ

  3. Cặp giá trị khóa trong PostgreSQL

  4. Trả về 0 nếu không tìm thấy bản ghi

  5. Làm thế nào để tạo lại một bảng đã xóa với Django Migrations?