Sobes.tech
Senior

Ak je tabuľka s JOIN-ami a je potrebný OFFSET — ako ho optimalizovať?

sobes.tech AI

Odpoveď od AI

Použitie OFFSET s JOIN-ami často vedie k zlej výkonnosti, pretože databáza musí spracovať a zoradiť všetky riadky až po požadované posunutie.

Na optimalizáciu môžete:

  • Použiť stránkovanie podľa kľúča (keyset pagination), teda namiesto OFFSET použiť podmienku WHERE s filtrom na unikátne alebo zoraditeľné pole (napríklad id > last_seen_id). To umožní databáze efektívne využívať indexy.

  • Minimalizovať počet JOIN-ov, ak je to možné, najskôr získať potrebné kľúče a potom načítať súvisiace údaje samostatnými dotazmi.

  • Pridať potrebné indexy na polia pre zoradenie a filtrovanie.

Príklad stránkovania podľa kľúča:

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 oveľa efektívnejšie ako OFFSET, najmä pri veľkých objemoch dát.