Consulta utilizando LIMIT e OFFSET
LIMIT e OFFSET permitem recuperar apenas uma parte das linhas que são gerados pelo resto da consulta.
A sintaxe é a seguinte:
Se for especificado um valor de limite, não será retornada mais que esta quantidade de linhas (mas possivelmente menos, se a consulta produzir menos linhas).
Exemplo:
Neste caso, a consulta retornará os 10 primeiros registros ou um valor menor, dependendo do conteúdo da tabela.
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.
Exemplo:
Já neste outro exemplo, a consulta pulará 10 registros e retornará os demais.
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 consequê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.
A sintaxe é a seguinte:
SELECT select_list FROM table_expression [LIMIT { number | ALL }] [OFFSET number]
Se for especificado um valor de limite, não será retornada mais que esta quantidade de linhas (mas possivelmente menos, se a consulta produzir menos linhas).
Exemplo:
SELECT * FROM nome_tabela LIMIT 10;
Neste caso, a consulta retornará os 10 primeiros registros ou um valor menor, dependendo do conteúdo da tabela.
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.
Exemplo:
SELECT * FROM nome_tabela OFFSET 10;
Já neste outro exemplo, a consulta pulará 10 registros e retornará os demais.
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 consequê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.
Comentários
Postar um comentário