PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

postgresql :décalage + limite devient très lent

Utilisez plutôt un curseur. L'utilisation d'un OFFSET et d'une LIMIT est assez coûteuse - car pg doit exécuter une requête, traiter et ignorer des lignes OFFSET. OFFSET c'est comme "sauter des lignes", c'est cher.

documentation du curseur

Le curseur permet une itération sur une requête.

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

Vous pouvez probablement utiliser un curseur côté serveur sans utiliser explicitement l'instruction DECLARE, juste avec le support dans psycopg (section de recherche sur les curseurs côté serveur).