Als er een tabel met JOINs is en er een OFFSET nodig is — hoe optimaliseer je dat?
sobes.tech AI
Antwoord van AI
Het gebruik van OFFSET met JOINs leidt vaak tot slechte prestaties, omdat de database alle rijen moet verwerken en sorteren tot de benodigde offset.
Om te optimaliseren, kun je:
-
Keyset-paginering gebruiken, dat wil zeggen, in plaats van OFFSET, een WHERE-voorwaarde met een filter op een uniek of sorteerveld (bijvoorbeeld, id > last_seen_id). Dit stelt de database in staat om indexen efficiënt te gebruiken.
-
Het aantal JOINs minimaliseren, indien mogelijk, door vooraf de benodigde sleutels op te halen en vervolgens de gerelateerde gegevens met aparte queries te laden.
-
De benodigde indexen toevoegen op de sorteervelden en filtervelden.
Voorbeeld van keyset-paginering:
SELECT t1.*, t2.* FROM table1 t1
JOIN table2 t2 ON t1.ref_id = t2.id
WHERE t1.id > ?
ORDER BY t1.id
LIMIT 20;
Dit is veel efficiënter dan OFFSET, vooral bij grote datasets.