Sobes.tech
Senior

Wenn es eine Tabelle mit JOINs gibt und ein OFFSET benötigt wird – wie optimieren?

sobes.tech KI

Antwort von AI

Die Verwendung von OFFSET mit JOINs führt häufig zu schlechter Leistung, da die Datenbank alle Zeilen bis zum erforderlichen Offset verarbeiten und sortieren muss.

Zur Optimierung kann man:

  • Schlüsselbasierte Paginierung (Keyset-Pagination) verwenden, also anstelle von OFFSET eine WHERE-Bedingung mit einem Filter auf ein eindeutiges oder sortierbares Feld (z.B. id > last_seen_id). Dies ermöglicht der Datenbank, Indizes effizient zu nutzen.

  • Die Anzahl der JOINs minimieren, wenn möglich, indem man die benötigten Schlüssel vorab abruft und dann die verbundenen Daten mit separaten Abfragen lädt.

  • Notwendige Indizes auf den Sortier- und Filterfeldern hinzufügen.

Beispiel für keyset pagination:

SELECT t1.*, t2.* FROM table1 t1
JOIN table2 t2 ON t1.ref_id = t2.id
WHERE t1.id > ?
ORDER BY t1.id
LIMIT 20;

Das ist viel effizienter als OFFSET, besonders bei großen Datenmengen.