Hoewel er nog geen scan voor het overslaan van de index in Postgres is, kunt u deze emuleren:
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;
Met een index op (product_id)
en slechts 40 unieke product-ID's in de tabel dit moet Snel zijn . Met hoofdletter F .
De PK-index op (product_id, trade_id)
is er ook goed voor!
Met slechts zeer weinig rijen per product_id
(het tegenovergestelde van uw gegevensdistributie), DISTINCT
/ DISTINCT ON
zou even snel of sneller zijn.
Er wordt gewerkt aan het implementeren van scans voor het overslaan van indexen.
Zie:
- Selecteer de eerste rij in elke GROUP BY-groep?
- Optimaliseer de GROUP BY-query om de laatste rij per gebruiker op te halen
- Is een samengestelde index ook goed voor zoekopdrachten op het eerste veld?