Steigerung der PostgreSQL-Paginierungsleistung bei großen Tabellen
Das Abrufen paginierter Daten aus großen PostgreSQL-Tabellen (Millionen Zeilen) mit OFFSET
kann die Abfragegeschwindigkeit erheblich beeinträchtigen. Dieser Artikel stellt eine überlegene Optimierungsstrategie vor: Keyset-Paginierung.
Keyset-Paginierung: Ein effizienterer Ansatz
Keyset-Paginierung vermeidet die Leistungsprobleme von OFFSET
, indem die Werte der letzten Zeile von der vorherigen Seite genutzt werden. Hier ist die Abfrage:
<code class="language-sql">SELECT * FROM big_table WHERE (vote, id) > (vote_x, id_x) ORDER BY vote, id LIMIT n;</code>
vote_x
und id_x
stellen die vote
und id
der letzten Zeile der vorherigen Seite dar. Dadurch kann die Datenbank Zeilen effizient überspringen, was die Leistung im Vergleich zu OFFSET
.
Indexverbesserung
Für eine optimale Leistung erstellen Sie einen Index für die in der WHERE
-Klausel verwendeten Spalten:
<code class="language-sql">CREATE INDEX vote_order_asc ON big_table (vote, id);</code>
Wichtige Hinweise:
(vote, id)
Kombination muss einzigartig sein, um konsistente Ergebnisse zu gewährleisten.ORDER BY
-Klausel muss mit der Richtung des Index übereinstimmen.ORDER BY
Richtungen.Weiterführende Literatur:
Das obige ist der detaillierte Inhalt vonWie kann die Keyset-Paginierung PostgreSQL-Abfragen mit großen Offsets optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!