Si bien no hay escaneo de omisión de índice en Postgres todavía, emularlo:
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 índice en (product_id)
y solo 40 ID de producto únicos en la tabla esto debería ser Rápido . Con F mayúscula .
El índice PK en (product_id, trade_id)
¡también es bueno para eso!
Con muy pocas filas por product_id
(lo opuesto a su distribución de datos), DISTINCT
/ DISTINCT ON
sería tan rápido o más rápido.
El trabajo para implementar escaneos de omisión de índice está en curso.
Ver:
- ¿Seleccionar la primera fila en cada grupo GROUP BY?
- Optimizar la consulta GROUP BY para recuperar la fila más reciente por usuario
- ¿Un índice compuesto también es bueno para consultas en el primer campo?