Quantas linhas pular no resultado
Offset é o deslocamento usado para pular uma quantidade de itens antes de devolver uma parte do resultado. Combinado a um limite, permite selecionar trechos de uma lista. Ele se refere à posição no resultado da consulta, não ao valor do identificador dos registros.
Se uma consulta ordenada usa limite dez e offset zero, retorna até os dez primeiros itens. Com offset dez, pula os dez primeiros e retorna até os dez seguintes. O filtro e a ordem precisam permanecer coerentes entre essas chamadas.
Os identificadores não precisam ser consecutivos. Se existem contatos com IDs 2, 7 e 20, pular uma linha descarta o primeiro item do resultado, e não todos os IDs menores ou iguais a um. Essa diferença separa deslocamento de filtro por chave.
Como a página é calculada
SELECT id, nome
FROM contatos
ORDER BY id
LIMIT 10 OFFSET 10;Com páginas numeradas a partir de um, o deslocamento costuma ser calculado por (pagina - 1) * tamanho. Para a página três com dez itens, o offset é vinte. A API pode adotar outra convenção, que precisa ser confirmada.
ORDER BY id oferece uma ordem determinística quando id é único. Ordenar apenas por nome pode deixar empates, e a ordem entre linhas empatadas não fica garantida. Acrescentar um desempate evita depender de uma sequência incidental do banco.
O que muda durante a navegação
Esse comportamento pode ser aceitável em algumas interfaces de navegação, mas inadequado para uma exportação que precisa examinar cada registro. A escolha depende do objetivo e das garantias oferecidas pela consulta.
O custo das páginas distantes
O banco precisa considerar as linhas puladas para chegar ao trecho solicitado. Um offset grande pode aumentar o trabalho mesmo quando a resposta contém poucos itens. O plano de execução, os índices e os filtros influenciam esse custo.
Não existe um tamanho universal a partir do qual offset deixa de servir. Meça as consultas relevantes e observe como o tempo varia nas páginas mais distantes. A facilidade de acessar uma página arbitrária pode ser útil quando esse comportamento é necessário.
Quando comparar com cursor
Paginação por chave ou cursor pode continuar a partir de valores ordenados, evitando certos deslocamentos e parte do trabalho de pular linhas. Ela exige um contrato e uma ordenação compatíveis. Também não resolve automaticamente toda mudança concorrente ou toda necessidade de fotografia consistente.
Em desenvolvimento, crie contatos com a mesma data e compare a ordem retornada. Insira um contato entre consultas e remova outro no início da lista para observar os deslocamentos. Confira também o retorno quando a consulta não encontra itens. O verbete de cursor de paginação explica outra forma de representar o ponto de continuação.
Dúvidas frequentes
Perguntas frequentes sobre Offset
- Offset dez começa no registro de id dez?
- O deslocamento pula dez posições do resultado ordenado. Ele não se refere ao valor do identificador, que pode ter lacunas e outra sequência.
- ORDER BY resolve qualquer repetição entre páginas?
- Uma ordem determinística resolve empates, mas inserções e exclusões podem deslocar a coleção entre chamadas. A lista não fica congelada apenas pela ordenação.
- Por que páginas distantes podem demorar?
- O banco precisa considerar as linhas puladas antes de devolver o trecho. O custo depende também de filtros, índices e plano de execução.
- Offset deve ser evitado em toda aplicação?
- Ele pode atender a listas e navegação por páginas arbitrárias. A adequação depende do volume, das mudanças concorrentes e das consultas medidas.
Para continuar
Recursos relacionados
Documentação
LIMIT e OFFSET no PostgreSQL
Documenta limites, deslocamento e a necessidade de ordenação previsível.
Abrir recursoDocumentação
Paginação na API Stripe
Apresenta parâmetros de continuação e indicação de mais resultados em uma API real.
Abrir recursoAplicação na formação
Developer Workspace
O offset define o deslocamento das consultas paginadas usadas para percorrer listagens na interface.
Conhecer a formação
Fontes consultadas
Referências deste verbete
Este verbete ajudou você?
Obrigado pela resposta. Ela fica salva apenas neste navegador.