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

Chỉ mục PostgreSQL không được sử dụng cho truy vấn trên các dải IP

Hãy thử một chỉ mục nhiều cột, nhưng với thứ tự đảo ngược trên cột thứ hai:

CREATE INDEX index_ips_begin_end_ip_num ON ips (begin_ip_num, end_ip_num DESC);

Việc sắp xếp thứ tự hầu như không liên quan đối với chỉ mục một cột, vì nó có thể được quét ngược gần như nhanh chóng. Nhưng điều quan trọng đối với các chỉ mục nhiều cột.

Với chỉ mục tôi đề xuất, Postgres có thể quét cột đầu tiên và tìm địa chỉ, nơi phần còn lại của chỉ mục đáp ứng điều kiện đầu tiên. Sau đó, nó có thể, đối với mỗi giá trị của cột đầu tiên, trả về tất cả các hàng đáp ứng điều kiện thứ hai, cho đến khi điều kiện đầu tiên không thành công. Sau đó chuyển đến giá trị tiếp theo của cột đầu tiên, v.v.
Điều này vẫn không hiệu quả lắm và Postgres có thể nhanh hơn chỉ cần quét cột chỉ mục đầu tiên và lọc cho cột thứ hai. Phụ thuộc rất nhiều vào việc phân phối dữ liệu của bạn.

Dù bằng cách nào, CLUSTER bằng cách sử dụng chỉ mục nhiều cột từ phía trên can hiệu suất trợ giúp:

CLUSTER ips USING index_ips_begin_end_ip_num

Bằng cách này, các ứng viên đáp ứng điều kiện đầu tiên của bạn được đóng gói trên các trang dữ liệu giống nhau hoặc liền kề. Có thể giúp hiệu suất rất nhiều nếu bạn có nhiều hàng trên mỗi giá trị của cột đầu tiên. Nếu không, nó hầu như không hiệu quả.
(Cũng có các công cụ bên ngoài không chặn cho mục đích:pg_repack hoặc pg_squeeze.)

Ngoài ra, autovacuum có đang chạy và được định cấu hình đúng cách hay bạn đã chạy ANALYZE trên bàn? Bạn cần số liệu thống kê hiện tại cho Postgres để chọn kế hoạch truy vấn thích hợp.

Điều thực sự sẽ hữu ích ở đây là chỉ số GiST cho một int8range , có sẵn kể từ PostgreSQL 9.2.

Đọc thêm:

  • Tối ưu hóa các truy vấn trên một loạt các dấu thời gian (hai cột)

Nếu phạm vi IP của bạn có thể được bao phủ bởi một trong các loại mạng tích hợp sẵn inet hoặc cidr , hãy xem xét để thay thế hai bigint của bạn cột. Hoặc, tốt hơn, hãy xem mô-đun bổ sung ip4r của Andrew Gierth (không có trong phân phối chuẩn. Chiến lược lập chỉ mục thay đổi tương ứng.

Ngoài ra, bạn có thể kiểm tra câu trả lời liên quan này trên dba.SE bằng cách sử dụng một chế độ phức tạp với các chỉ mục một phần. Công cụ nâng cao nhưng mang lại hiệu suất tuyệt vời:

  • Chỉ mục không gian có thể trợ giúp truy vấn "phạm vi - sắp xếp theo - giới hạn" không


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi PostgreSQL:Fatal:tên người dùng vai trò không tồn tại

  2. Khóa chính tổng hợp PostgreSQL

  3. Làm cách nào để sử dụng LoggingConnection của Psycopg2?

  4. Cách bỏ nhiều bảng trong PostgreSQL bằng ký tự đại diện

  5. Hiểu các loại ngày và chức năng của PostgreSQL (bằng các ví dụ)