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

Làm cách nào để cải thiện hiệu suất truy vấn dựa trên ngày trên một bảng lớn?

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:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP json_encode Sự cố với Dấu gạch chéo ngược và Tên mảng

  2. Chọn ba giá trị hàng đầu trong mỗi nhóm

  3. Sự cố khi kết nối Pentaho Kettle / Spoon với Heroku PostgreSQL bằng SSL

  4. Chèn NULL vào DB PostgreSQL qua PHP khi trường ngày trống

  5. Làm cách nào để thêm một Cột mới trong bảng sau cột thứ 2 hoặc thứ 3 trong Bảng bằng cách sử dụng postgres?