Sobes.tech
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.