Senior
Kui on tabel koos JOIN-idega ja on vaja OFFSET-i — kuidas seda optimeerida?
sobes.tech AI
Vastus AI-lt
Offset kasutamine koos JOIN-idega põhjustab sageli halba jõudlust, kuna andmebaas peab töötlema ja sorteerima kõik read kuni vajaliku nihkeni.
Optimeerimiseks saab:
-
kasutada võtmepõhist lehitsemist (keyset pagination), see tähendab, et OFFSET-i asemel kasutatakse WHERE tingimust unikaalse või sorteeritava välja (näiteks id > last_seen_id). See võimaldab andmebaasil tõhusalt kasutada indekseid.
-
vähendada JOIN-ide arvu, kui võimalik, esmalt saades vajalikud võtmed ja seejärel laadides seotud andmed eraldi päringutega.
-
lisada vajalikud indeksid sorteerimise ja filtreerimise väljadele.
Näide võtmepõhisest lehitsemisest:
SELECT t1.*, t2.* FROM table1 t1
JOIN table2 t2 ON t1.ref_id = t2.id
WHERE t1.id > ?
ORDER BY t1.id
LIMIT 20;
See on palju tõhusam kui OFFSET, eriti suurte andmekogumite puhul.