PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

SELECT DISTINCT é mais lento que o esperado na minha tabela no PostgreSQL


Embora ainda não haja varredura de salto de índice no Postgres, emule-o:
WITH RECURSIVE cte AS (
   (   -- parentheses required
   SELECT product_id
   FROM   tickers
   ORDER  BY 1
   LIMIT  1
   )
   UNION ALL
   SELECT l.*
   FROM   cte c
   CROSS  JOIN LATERAL (
      SELECT product_id
      FROM   tickers t
      WHERE  t.product_id > c.product_id  -- lateral reference
      ORDER  BY 1
      LIMIT  1
      ) l
   )
TABLE  cte;

Com um índice em (product_id) e apenas 40 IDs de produtos exclusivos na tabela isso deve ser Rápido . Com F maiúsculo .
O índice PK em (product_id, trade_id) é bom para isso, também!

Com poucas linhas por product_id (o oposto de sua distribuição de dados), DISTINCT / DISTINCT ON seria tão rápido ou mais rápido.

O trabalho para implementar verificações de salto de índice está em andamento.
Veja:
  • Selecionar a primeira linha em cada grupo GROUP BY?
  • Otimize a consulta GROUP BY para recuperar a última linha por usuário
  • Um índice composto também é bom para consultas no primeiro campo?