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