7.6. LIMIT e OFFSET

PostgreSQL 14.5: LIMIT e OFFSET

LIMIT (limite) e OFFSET (deslocamento) permitem que seja trazida apenas uma parte das linhas geradas pelo restante da consulta:

SELECT lista_de_seleção
    FROM expressão_de_tabela
    [LIMIT { número | ALL }] [OFFSET número]

Se for especificado o limite, não será retornada mais que esta quantidade de linhas (mas possivelmente menos, se a consulta produzir menos linhas). LIMIT ALL é o mesmo que omitir a cláusula LIMIT.

OFFSET diz para saltar esta quantidade de linhas antes de começar a retornar as linhas. OFFSET 0 é o mesmo que omitir a cláusula OFFSET. Se forem especificados tanto OFFSET quanto LIMIT, então são saltadas OFFSET linhas antes de começar a contar as LIMIT linhas que serão retornadas.

Quando se utiliza LIMIT é importante utilizar a cláusula 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; pode-se desejar obter da décima a vigésima linha, mas da décima a vigésima de qual ordem? A ordem é desconhecida a não ser que seja especificado ORDER BY.

O otimizador de consultas leva LIMIT em consideração para gerar o plano da consulta, portanto é bastante provável obter planos diferentes (resultando em uma ordem diferente das linhas) dependendo do que for especificado para LIMIT e OFFSET. Portanto, utilizar valores diferentes de LIMIT/OFFSET para selecionar subconjuntos diferentes do resultado da consulta produz resultados inconsistentes, a não ser que seja imposta uma ordem previsível do resultado por meio da cláusula ORDER BY. Isto não está errado; isto é uma conseqüência inerente ao fato do SQL não prometer retornar os resultados de uma consulta em qualquer ordem específica, a não ser que ORDER BY seja utilizado para impor esta ordem.

É necessário computar as linhas saltadas pelo OFFSET no servidor; portanto, um OFFSET grande pode ser ineficiente.

SourceForge.net Logo CSS válido!