LIMIT, OFFSET e noções básicas de paginação
Faça a paginação de grandes conjuntos de resultados com LIMIT e OFFSET, entenda as concessões de desempenho e use paginação por chave para uma rolagem estável.
LIMIT, OFFSET e noções básicas de paginação é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.
LIMIT: limite o resultado
LIMIT n retorna no máximo n linhas:
SELECT * FROM products
ORDER BY created_at DESC
LIMIT 10;OFFSET: ignore as primeiras N linhas
OFFSET k ignora as primeiras k linhas:
-- Rows 11–20 (the second page of 10):
SELECT * FROM products
ORDER BY created_at DESC
LIMIT 10 OFFSET 10;Paginação = LIMIT + OFFSET
O padrão clássico de paginação por número de página:
-- Page p (1-based), page size s:
SELECT * FROM articles
ORDER BY published_at DESC
LIMIT s OFFSET (p - 1) * s;Por que OFFSET fica lento
OFFSET ainda lê internamente todas as linhas ignoradas:
- Página 1 de 10 → lê 10 linhas
- Página 1000 de 10 → lê 10.000 linhas
- Página 1.000.000 → lê dez milhões
OFFSET é O(offset). Para páginas profundas, isso é inviável.
Paginação por conjunto de chaves ("método de busca")
Avance de página lembrando-se da última chave de ordenação vista:
-- First page:
SELECT * FROM articles
ORDER BY published_at DESC, id DESC
LIMIT 20;
-- Next page — pass the last seen (published_at, id):
SELECT * FROM articles
WHERE (published_at, id) < ($1, $2)
ORDER BY published_at DESC, id DESC
LIMIT 20;Por que a paginação por conjunto de chaves é mais rápida
A paginação por conjunto de chaves usa uma varredura de intervalo do índice: vai diretamente para a linha após a última linha vista, lê N linhas e termina. O custo é O(tamanho da página), independentemente da profundidade da página.
LIMIT sem ORDER BY é não determinístico
Regra prática: combine LIMIT sempre com ORDER BY. Caso contrário, o banco de dados poderá retornar linhas diferentes a cada chamada.
-- Wrong — results may vary between runs:
SELECT * FROM events LIMIT 10;
-- Right:
SELECT * FROM events ORDER BY id DESC LIMIT 10;Contagens totais e paginação
Às vezes, a interface precisa da contagem total de linhas. Uma consulta separada com COUNT(*) é a opção mais simples, mas pode ser cara em tabelas grandes:
SELECT COUNT(*) FROM articles WHERE author_id = $1;
-- Alternative for huge tables: estimate from pg_class.reltuples or use approximate counts.FETCH FIRST (SQL padrão)
Sintaxe padrão do SQL para LIMIT:
SELECT * FROM products
ORDER BY id
FETCH FIRST 10 ROWS ONLY;
-- With offset:
-- OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLYCursores para conjuntos de resultados enormes
Para exportar milhões de linhas, use um cursor do banco de dados ou um controlador de transmissão em vez de loops com LIMIT/OFFSET:
BEGIN;
DECLARE big_cursor CURSOR FOR
SELECT * FROM events ORDER BY id;
FETCH 1000 FROM big_cursor;
-- ...
CLOSE big_cursor;
COMMIT;Quando OFFSET está OK
OFFSET é adequado para páginas pouco profundas (páginas 1–10 de uma interface) ou para tabelas pequenas. Para paginação profunda, rolagem infinita ou APIs, use a paginação por conjunto de chaves.
Recapitulação
LIMIT e OFFSET fazem a paginação dos conjuntos de resultados.
- Sempre combine-os com ORDER BY
- OFFSET fica lento em páginas profundas — mude para a paginação por conjunto de chaves em páginas grandes
- FETCH FIRST é o equivalente padrão
Verificação rápida
Qual é a maneira mais eficiente de fazer paginação profunda em uma tabela grande?
Perguntas Frequentes
A aula “LIMIT, OFFSET e noções básicas de paginação” é grátis?
Sim — o texto completo de “LIMIT, OFFSET e noções básicas de paginação” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.
O que vou aprender em “LIMIT, OFFSET e noções básicas de paginação”?
Faça a paginação de grandes conjuntos de resultados com LIMIT e OFFSET, entenda as concessões de desempenho e use paginação por chave para uma rolagem estável. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar SQL Academy?
Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “LIMIT, OFFSET e noções básicas de paginação”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de SQL Academy?
Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Selecionando colunas e expressões
- Filtros WHERE: operadores de comparação e lógica
- ORDER BY com uma ou várias colunas
- LIMIT, OFFSET e noções básicas de paginação