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

Postgres Slow grupuj według zapytań z max

Potrzebujesz „pomiń skanowanie” lub „luźne skanowanie indeksu ". Planner PostgreSQL nie implementuje ich jeszcze automatycznie, ale możesz go oszukać za pomocą zapytania rekurencyjnego.

WITH RECURSIVE  t AS (
SELECT min(eventtype) AS eventtype FROM allevents
           UNION ALL
SELECT (SELECT min(eventtype) as eventtype FROM allevents WHERE eventtype > t.eventtype)
   FROM t where t.eventtype is not null
)
select eventtype, (select max(eventtime) from allevents where eventtype=t.eventtype) from t;

Może istnieć sposób na zwinięcie max(eventtime) do zapytania rekurencyjnego, zamiast robić to poza tym zapytaniem, ale jeśli tak, nie trafiłem na to.

Wymaga to indeksu (typ zdarzenia, czas zdarzenia), aby działać wydajnie. Możesz mieć DESC w czasie wydarzenia, ale nie jest to konieczne. Jest to skuteczne tylko wtedy, gdy eventtype ma tylko kilka odrębnych wartości (w twoim przypadku 21).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak stworzyć rozszerzenie postgres wewnątrz kontenera?

  2. Czy ma to wpływ na wydajność, jeśli tabela zawiera wiele nieużywanych/niewybranych kolumn?

  3. Dodanie „serial” do istniejącej kolumny w Postgres

  4. Tworzenie PostgreSQL dla Windows, część 2

  5. Postgresql Wiele zliczeń dla jednego stołu