Chociaż w Postgresie nie ma jeszcze skanowania z pomijaniem indeksu, emuluj go:
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;
Z indeksem na (product_id)
i tylko 40 unikalnych identyfikatorów produktów w tabeli to powinno być szybko . Przez duże F .
Indeks PK w (product_id, trade_id)
to też jest dobre!
Z bardzo małą liczbą wierszy na product_id
(przeciwieństwo dystrybucji danych), DISTINCT
/ DISTINCT ON
byłby tak szybki lub szybszy.
Trwają prace nad wdrożeniem skanowania z pomijaniem indeksu.
Patrz:
- Wybrać pierwszy wiersz w każdej grupie GROUP BY?
- Zoptymalizuj zapytanie GROUP BY, aby pobrać ostatni wiersz na użytkownika
- Czy indeks złożony jest również odpowiedni dla zapytań w pierwszym polu?