PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

postgresql:offset + limit fica muito lento


Use um cursor em vez disso. Usar um OFFSET e LIMIT é muito caro - porque o pg precisa executar a consulta, processar e pular as linhas OFFSET. OFFSET é como "pular linhas", que é caro.

documentação do cursor

O cursor permite uma iteração sobre uma consulta.
BEGIN
DECLARE C CURSOR FOR SELECT * FROM big_table;
FETCH 300 FROM C; -- get 300 rows
FETCH 300 FROM C; -- get 300 rows
...
COMMIT;

Provavelmente você pode usar um cursor do lado do servidor sem o uso explícito da instrução DECLARE, apenas com suporte em psycopg (seção de pesquisa sobre cursores do lado do servidor).