Todo desenvolvedor, principalmente desenvolvedor web, precisa fazer paginação de dados quando trabalha com banco de dados com grande quantidade de registros. O PostgreSQL é muito amigo quando se trata de fazer paginação de dados pois os recursos LIMIT e OFFSET permitem selecionar conjunto de dados para montarmos nossa paginação. Paginação no banco de dados é muito mais eficiente do que paginação no cliente.
O LIMIT (limite) permite que seja retornado somente a quantidade de registros especificado pelo parâmertro. O restante das linhas serão ignoradas e dependendo da quantidade real de registros, o retorno será muito mais rápido.
O OFFSET (deslocamento) diz para saltar a quantidade de linhas antes de começar a mostrar as linhas do parâmetro LIMIT.
Veja os exemplos abaixo.
SELECT id, nome FROM public.cliente WHERE estado = 'MS' ORDER BY nome LIMIT 50 ;
A instrução acima lista apenas os 50 primeiros registros da SELECT.
SELECT id, nome FROM public.cliente WHERE estado = 'MS' ORDER BY nome LIMIT 50 OFFSET 0;
A instrução acima lista apenas os 50 primeiros registros da SELECT iniciando do registro 0 que é o primeiro registro. Neste caso, não há diferença para a consulta anterior.
SELECT id, nome FROM public.cliente WHERE estado = 'MS' ORDER BY nome LIMIT 50 OFFSET 50;
A instrução acima lista 50 registros, iniciando do registro 50. Se desenvolvêssemos uma consulta com páginas de 50 registros, esta consulta retornaria a segunda página. Para as próximas páginas, bastaríamos alterar o valor do OFFSET em múltiplos de 50.
A consulta utilizando LIMIT e OFFSET é muito mais rápida e tem um custo muito menor do que você utilizar grade de dados com Javascript que apenas pega todos os registros e faz a paginação no cliente.
Um ponto importante a ser levado em consideração é sempre utilizar ORDER BY para estabelecer uma ordem única para as linhas do resultado, caso contrário, será retornado um subconjunto imprevisível de linhas da consulta.
1 comentário
Daniel · 16 de abril de 2021 às 16:06
Muito obrigado por explicar sem enrolação.