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

Chọn chỉ mục phù hợp cho truy vấn PostgreSQL

Tạo chỉ mục một phần, nhiều cột với thứ tự sắp xếp cụ thể sau:

CREATE INDEX products_status_sales_partial_idx ON products (status, sales DESC)
WHERE  category NOT IN ('cat3','cat7');

Sửa đổi một chút truy vấn của bạn:

SELECT product_no, sales 
FROM   products 
WHERE  status = 'something'
AND    category NOT IN ('cat3', 'cat7') 
ORDER  BY status, sales DESC 
LIMIT  3;

Thêm status là phần tử đầu tiên của ORDER BY mệnh đề có vẻ thừa và vô nghĩa. Nhưng hãy thử.

Tại sao?

Người lập kế hoạch truy vấn không đủ thông minh để hiểu điều đó với

WHERE  status = 'something' ...
ORDER  BY sales DESC

thứ tự sắp xếp của chỉ mục (status, sales DESC) phù hợp như một hệ quả hợp lý. Vì vậy, nó sẽ đọc tất cả các hàng đủ điều kiện, sắp xếp và chọn 3 hàng đầu.

Bằng cách thêm status vào ORDER BY bạn cho phép trình lập kế hoạch truy vấn đọc trực tiếp 3 mục nhập hàng đầu từ chỉ mục. Mong đợi tốc độ tăng lên vài bậc của cường độ .

Đã thử nghiệm với PostgreSQL 8.4 và 9.1.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. psycopg2.ProgrammingError:sự kiện quan hệ không tồn tại

  2. Xác thực truy vấn SQL với PHP

  3. Cảnh báo gây phiền nhiễu cho con rối và Postgres:Phiên bản chuyển sang máy chủ postgresql ::không được dùng nữa

  4. Lỗi định dạng ngày postgresql

  5. Làm cách nào để tạo kiểu cột tùy chỉnh với Typesafe Slick trong Scala?