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.