I když v Postgresu zatím není žádné skenování přeskočením indexu, emulujte jej:
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;
S indexem na (product_id)
a pouze 40 jedinečných ID produktů v tabulce toto by mělo být Rychlé . S velkým F .
Index PK na (product_id, trade_id)
je pro to také dobré!
Pouze velmi málo řádků na product_id
(opak vaší distribuce dat), DISTINCT
/ DISTINCT ON
bude stejně rychlé nebo rychlejší.
Práce na implementaci skenování přeskočení indexu pokračují.
Viz:
- Vybrat první řádek v každé skupině GROUP BY?
- Optimalizujte dotaz GROUP BY pro načtení posledního řádku na uživatele
- Je složený index vhodný také pro dotazy na první pole?