Giả sử chúng ta đang xử lý một bảng lớn , một chỉ mục một phần có thể giúp:
CREATE INDEX tbl_created_recently_idx ON tbl (created_at DESC)
WHERE created_at > '2013-09-15 0:0'::timestamp;
Như bạn đã phát hiện ra:giảm dần hoặc tăng dần hầu như không quan trọng ở đây. Postgres có thể quét ngược với tốc độ gần như tương tự (áp dụng ngoại lệ với các chỉ số nhiều cột).
Truy vấn sử dụng chỉ mục này:
SELECT * FROM tbl
WHERE created_at > '2013-09-15 0:0'::timestamp -- matches index
ORDER BY created_at DESC
LIMIT 1;
Vấn đề ở đây là làm cho chỉ mục nhỏ hơn nhiều , do đó, bộ nhớ cache và bảo trì sẽ dễ dàng hơn.
- Bạn cần chọn một dấu thời gian được đảm bảo là nhỏ hơn dấu thời gian gần đây nhất.
- Thỉnh thoảng, bạn nên tạo lại chỉ mục để loại bỏ dữ liệu cũ.
- Điều kiện cần phải là
IMMUTABLE
.
Vì vậy, hiệu quả một lần sẽ giảm dần theo thời gian. Sự cố cụ thể là điều kiện được mã hóa cứng:
WHERE created_at > '2013-09-15 0:0'::timestamp
Tự động hóa
Thỉnh thoảng, bạn có thể cập nhật chỉ mục và các truy vấn của mình theo cách thủ công. Hoặc bạn tự động hóa nó với sự trợ giúp của một chức năng như sau:
CREATE OR REPLACE FUNCTION f_min_ts()
RETURNS timestamp LANGUAGE sql IMMUTABLE AS
$$SELECT '2013-09-15 0:0'::timestamp$$
Chỉ mục:
CREATE INDEX tbl_created_recently_idx ON tbl (created_at DESC);
WHERE created_at > f_min_ts();
Truy vấn:
SELECT * FROM tbl
WHERE created_at > f_min_ts()
ORDER BY created_at DESC
LIMIT 1;
Tự động hóa giải trí với một công việc cron hoặc một số sự kiện dựa trên trình kích hoạt. Các truy vấn của bạn có thể giữ nguyên ngay bây giờ. Nhưng bạn cần tạo lại tất cả các chỉ số sử dụng chức năng này theo bất kỳ cách nào sau khi thay đổi nó. Chỉ cần thả và tạo từng cái.
Đầu tiên ..
... kiểm tra xem bạn có đang thực sự đập vào cổ chai với cái này hay không.
Thử xem một chỉ mục DROP index ... ; CREATE index ...
Làm công việc. Sau đó, chỉ mục của bạn có thể đã bị phình ra. Cài đặt autovacuum của bạn có thể bị tắt.
Hoặc thử VACUUM FULL ANALYZE
để có được toàn bộ bảng của bạn cùng với các chỉ số ở tình trạng nguyên sơ và kiểm tra lại.
Các tùy chọn khác bao gồm các chỉ mục bao gồm và điều chỉnh hiệu suất chung thông thường, tùy thuộc vào những gì bạn thực sự truy xuất từ bảng.