Một chế độ xem cụ thể hóa là con đường để đi cho những gì bạn đã vạch ra. Truy vấn dữ liệu chỉ đọc những tháng trước hoạt động mà không cần làm mới nó. Bạn có thể muốn viết hoa đặc biệt cho tháng hiện tại nếu bạn cũng cần trang trải điều đó.
Truy vấn cơ bản vẫn có thể được hưởng lợi từ một chỉ mục và có hai hướng bạn có thể thực hiện:
Trước hết, chỉ mục một phần như bạn có bây giờ sẽ không mua nhiều trong kịch bản của bạn, không đáng giá. Nếu bạn thu thập thêm nhiều tháng dữ liệu và chủ yếu truy vấn theo tháng (và thêm / bớt hàng theo tháng) phân vùng bảng có thể là một ý tưởng, sau đó bạn cũng có các chỉ mục của mình được phân vùng tự động. Tuy nhiên, tôi sẽ xem xét Postgres 11 hoặc thậm chí Postgres 12 sắp tới cho điều này.)
Nếu hàng của bạn rộng , tạo chỉ mục cho phép chỉ quét theo chỉ mục . Như:
CREATE INDEX reportimpression_covering_idx ON reportimpression(datelocal, views, gender);
Có liên quan:
Hoặc INCLUDE
các cột bổ sung trong Postgres 11 trở lên:
CREATE INDEX reportimpression_covering_idx ON reportimpression(datelocal) INCLUDE (views, gender);
Khác , nếu các hàng của bạn được sắp xếp vật lý theo datelocal
, hãy xem xét chỉ mục BRIN
. Nó cực kỳ nhỏ và có thể nhanh bằng chỉ mục B-tree cho trường hợp của bạn. (Nhưng quá nhỏ, nó sẽ lưu vào bộ nhớ đệm dễ dàng hơn nhiều và không đẩy dữ liệu khác ra ngoài nhiều.)
CREATE INDEX reportimpression_brin_idx ON reportimpression USING BRIN (datelocal);
Bạn có thể quan tâm đến CLUSTER
hoặc pg_repack
để sắp xếp vật lý các hàng trong bảng. pg_repack
có thể làm điều đó mà không có ổ khóa độc quyền trên bàn và thậm chí không có chỉ mục btree (được yêu cầu bởi CLUSTER
). Nhưng đó là một mô-đun bổ sung không được cung cấp cùng với bản phân phối tiêu chuẩn của Postgres.
Có liên quan:
- Optimize Postgres xóa các bản ghi mồ côi
- Cách lấy lại dung lượng đĩa sau khi xóa mà không cần tạo lại bảng?