Các chỉ mục hoạt động tốt khi chỉ quét các phân vùng có liên quan trong PostgreSQL. Tuy nhiên, bạn phải thiết lập mọi thứ đúng cách để nó hoạt động và rất dễ bỏ lỡ một bước trong danh sách dài những thứ được ghi lại tại http://www.postgresql.org/docs/current/static/ddl-partitioning.html
Điều chính cần nhận ra là để tránh quét tuần tự, bạn phải cung cấp đủ thông tin cho PostgreSQL để nó có thể chứng minh một số phân vùng không thể có dữ liệu bạn đang tìm kiếm; sau đó chúng được bỏ qua như là nguồn tiềm năng cho kết quả truy vấn. Bài viết bạn liên kết chỉ ra điều này như một giải pháp cho vấn đề quét seq:"Nếu bạn thêm các ràng buộc phạm vi vào trường ngày của mỗi phân vùng, truy vấn này có thể được tối ưu hóa thành một vòng lặp nơi bạn truy vấn phân vùng" mới nhất "trước và hoạt động ngược lại cho đến khi bạn tìm thấy một giá trị duy nhất cao hơn phạm vi của tất cả các phân vùng còn lại. "- nhưng không hiển thị kế hoạch được cải thiện mà bạn sẽ thấy sau thay đổi đó.
Một số lỗi bạn có thể mắc phải:
- Tham số bind_exclusion trong tệp postgresql.conf bị tắt theo mặc định. Với mặc định đó, bạn sẽ không nhận được những gì bạn mong đợi.
-Không tạo phân vùng không chồng chéo bằng CHECK, điều này giúp người lập kế hoạch không biết những gì bên trong mỗi phân vùng. Có thể bỏ lỡ bước này nhưng vẫn đưa dữ liệu của bạn vào đúng phân vùng đúng cách, người lập kế hoạch sẽ không biết điều đó.
-Không đặt chỉ mục trên mỗi phân vùng, chỉ tạo một chỉ mục trên bảng chủ. Thao tác này sẽ cung cấp cho bạn một quá trình quét tuần tự ngay trên phân vùng có liên quan, vì vậy không quá tệ như phần trên nhưng cũng không tốt.
Có một số công việc để làm cho tất cả điều này trở nên dễ dàng hơn trong các bản phát hành PostgreSQL sắp tới (thiết lập phân vùng ràng buộc khá tự động trong 8.4 và một số loại tự động hóa thiết lập phân vùng đang được thực hiện). Ngay bây giờ, nếu bạn làm theo hướng dẫn cẩn thận và tránh tất cả những vấn đề này, nó sẽ hoạt động.