PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak poprawić wydajność zapytań opartych na datach w dużej tabeli?

widok zmaterializowany to droga do tego, co nakreśliłeś. Wysyłanie zapytań dotyczących danych tylko do odczytu z ostatnich miesięcy działa bez ich odświeżania. Jeśli chcesz to również pokryć, możesz zaznaczyć specjalny przypadek w bieżącym miesiącu.

Podstawowe zapytanie może nadal korzystać z indeksu, a istnieją dwa kierunki, które możesz obrać:

Po pierwsze, częściowe indeksy tak jak teraz, nie kupisz wiele w swoim scenariuszu, nie warto. Jeśli zbierasz dane o wiele więcej miesięcy i najczęściej wysyłasz zapytania według miesiąca (i dodajesz/upuszczasz wiersze według miesiąca), partycjonowanie tabeli może być pomysłem, wtedy masz również automatycznie partycjonowane indeksy. Rozważę jednak Postgres 11 lub nawet nadchodzący Postgres 12.)

Jeśli Twoje wiersze są szerokie , utwórz indeks, który umożliwia skanowanie tylko do indeksu . Na przykład:

CREATE INDEX reportimpression_covering_idx ON reportimpression(datelocal, views, gender);

Powiązane:

Lub INCLUDE dodatkowe kolumny w Postgresie 11 lub nowszym:

CREATE INDEX reportimpression_covering_idx ON reportimpression(datelocal) INCLUDE (views, gender);

Inne , jeśli twoje wiersze są fizycznie posortowane według datelocal , rozważ indeks BRIN . Jest bardzo mały i prawdopodobnie tak szybki jak indeks B-drzewa dla twojego przypadku. (Ale jest tak mały, że znacznie łatwiej pozostanie w pamięci podręcznej i nie będzie tak bardzo wypychał innych danych.)

CREATE INDEX reportimpression_brin_idx ON reportimpression USING BRIN (datelocal);

Być może zainteresuje Cię CLUSTER lub pg_repack do fizycznego sortowania wierszy tabeli. pg_repack może to zrobić bez wyłącznych blokad na stole, a nawet bez indeksu btree (wymagane przez CLUSTER ). Ale jest to dodatkowy moduł, który nie jest dostarczany ze standardową dystrybucją Postgresa.

Powiązane:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najlepsze praktyki obsługi relacji między tabelami w Spring Data R2dbc

  2. PGAdmin 4 nie tworzy kopii zapasowej bazy danych bez błędów

  3. postgresql - zamień wszystkie wystąpienia ciągu w polu tekstowym

  4. Biblioteka nie załadowana:/usr/local/lib/libpq.5.4.dylib

  5. Npgsql/ Postgresql:funkcja nie istnieje komunikat o błędzie, gdy tak się dzieje