PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

postgresql:offset + limit wird sehr langsam

Verwenden Sie stattdessen einen Cursor. Die Verwendung von OFFSET und LIMIT ist ziemlich teuer - da pg eine OFFSET-Zeile ausführen, verarbeiten und überspringen muss. OFFSET ist wie "Zeilen überspringen", das ist teuer.

Cursor-Dokumentation

Cursor erlaubt eine Iteration über eine Abfrage.

BEGIN
DECLARE C CURSOR FOR SELECT * FROM big_table;
FETCH 300 FROM C; -- get 300 rows
FETCH 300 FROM C; -- get 300 rows
...
COMMIT;

Wahrscheinlich können Sie einen serverseitigen Cursor ohne explizite Verwendung der DECLARE-Anweisung verwenden, nur mit Unterstützung in psycopg (Suchabschnitt über serverseitige Cursor).