Senior
Pokud je tabulka s JOINy a je potřeba OFFSET — jak optimalizovat?
sobes.tech AI
Odpověď od AI
Použití OFFSET s JOINy často vede ke špatnému výkonu, protože databáze musí zpracovat a seřadit všechny řádky až po požadované posunutí.
Pro optimalizaci lze:
-
Použít stránkování podle klíče (keyset pagination), tj. místo OFFSET použít podmínku WHERE s filtrem na unikátní nebo řaditelné pole (například id > last_seen_id). To umožní databázi efektivně využívat indexy.
-
Minimalizovat počet JOINů, pokud je to možné, nejprve získat potřebné klíče a poté načíst související data samostatnými dotazy.
-
Přidat potřebné indexy na pole pro řazení a filtrování.
Příklad stránkování podle klíče:
SELECT t1.*, t2.* FROM table1 t1
JOIN table2 t2 ON t1.ref_id = t2.id
WHERE t1.id > ?
ORDER BY t1.id
LIMIT 20;
Toto je mnohem efektivnější než OFFSET, zejména u velkých objemů dat.