PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

postgresql:offset + limit diventa molto lento

Usa invece un cursore. L'uso di OFFSET e LIMIT è piuttosto costoso, perché pg deve eseguire query, elaborare e saltare righe OFFSET. OFFSET è come "salta le righe", che è costoso.

documentazione del cursore

Il cursore consente un'iterazione su una query.

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

Probabilmente puoi usare un cursore lato server senza l'uso esplicito dell'istruzione DECLARE, solo con il supporto in psycopg (sezione di ricerca sui cursori lato server).