Anche se in Postgres non è ancora presente la scansione di salto dell'indice, emulala:
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;
Con un indice su (product_id)
e solo 40 ID prodotto univoci nella tabella dovrebbe essere Veloce . Con F maiuscola .
L'indice PK su (product_id, trade_id)
va bene anche per questo!
Con solo pochissime righe per product_id
(l'opposto della tua distribuzione dei dati), DISTINCT
/ DISTINCT ON
sarebbe altrettanto veloce o più veloce.
Il lavoro per implementare le scansioni di salto dell'indice è in corso.
Vedi:
- Seleziona la prima riga in ogni gruppo GROUP BY?
- Ottimizza la query GROUP BY per recuperare l'ultima riga per utente
- Un indice composito va bene anche per le query sul primo campo?