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?