PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgres Бавно групиране по заявка с макс

Това, от което се нуждаете, е „пропускане на сканиране“ или „разхлабено сканиране на индекс ". Планировчикът на PostgreSQL все още не ги прилага автоматично, но можете да го подмамите да използва такъв, като използвате рекурсивна заявка.

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;

Може да има начин да свиете max(eventtime) в рекурсивната заявка, вместо да го правите извън тази заявка, но ако е така, не съм го намерил.

Това се нуждае от индекс на (eventtype, eventtime), за да бъде ефективно. Можете да го накарате да бъде DESC в eventtime, но това не е необходимо. Това е ефективно само ако eventtype има само няколко отделни стойности (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. Как да конвертирате клеймо за време в цяло число (Unix епоха) в Postgres

  2. sqlalchemy с postgres:вмъкнете в таблица, чиито колони имат скоби

  3. Как да прочета синтаксиса на документацията за командите на PostgreSQL?

  4. Как да получите последния ред на група в PostgreSQL

  5. Не може да се свърже със сървъра на PostgreSQL:не може да се свърже със сървъра:Разрешението е отказано