Por favor, marque-o como resposta se tiver esclarecido suas dúvidas, como você mencionou nos comentários.
Mubashar 16/02
Respostas:
270
As duas formas de sintaxe são um pouco confusas porque invertem os números:
LIMIT <skip>,<count>
É equivalente a:
LIMIT <count> OFFSET <skip>
É compatível com a sintaxe do MySQL e PostgreSQL. O MySQL suporta ambas as formas de sintaxe, e seus documentos afirmam que a segunda sintaxe com OFFSET foi criada para fornecer compatibilidade com o PostgreSQL. Os documentos do PostgreSQL mostram que ele suporta apenas a segunda sintaxe, e os documentos do SQLite mostram que ele suporta os dois, recomendando a segunda sintaxe para evitar confusão.
A propósito, usar LIMIT sem primeiro usar ORDER BY nem sempre pode fornecer os resultados que você pretende. Na prática, o SQLite retornará as linhas em alguma ordem, provavelmente determinada pela forma como elas estão fisicamente armazenadas no arquivo. Mas isso não significa necessariamente que está na ordem que você deseja. A única maneira de obter um pedido previsível é usar ORDER BY explicitamente.
A última é uma sintaxe alternativa com uma ressalva :
Se uma vírgula for usada em vez da palavra-chave OFFSET, o deslocamento será o primeiro número e o limite será o segundo número. Essa aparente contradição é intencional - maximiza a compatibilidade com os sistemas de banco de dados SQL herdados.
Fiz alguns testes e não há diferença no desempenho.
Isso é apenas para compatibilidade com outras linguagens sql.
O tempo de execução das duas versões é o mesmo.
Criei sqlite db com table1 com 100000 linhas. Eu corro próximo teste
long timeLimitOffset =0;
long timeLimitComma =0;for(int i =0; i <100000; i++){//first version
timeLimitOffset += SqlDuraction("Select * from table1 order by col1 LIMIT "+(i +1)+" OFFSET "+(1001- i)+"");// second version
timeLimitComma += SqlDuraction("Select * from table1 order by col1 LIMIT "+(1001- i)+" , "+(i +1)+"");}
Respostas:
As duas formas de sintaxe são um pouco confusas porque invertem os números:
É equivalente a:
É compatível com a sintaxe do MySQL e PostgreSQL. O MySQL suporta ambas as formas de sintaxe, e seus documentos afirmam que a segunda sintaxe com OFFSET foi criada para fornecer compatibilidade com o PostgreSQL. Os documentos do PostgreSQL mostram que ele suporta apenas a segunda sintaxe, e os documentos do SQLite mostram que ele suporta os dois, recomendando a segunda sintaxe para evitar confusão.
A propósito, usar LIMIT sem primeiro usar ORDER BY nem sempre pode fornecer os resultados que você pretende. Na prática, o SQLite retornará as linhas em alguma ordem, provavelmente determinada pela forma como elas estão fisicamente armazenadas no arquivo. Mas isso não significa necessariamente que está na ordem que você deseja. A única maneira de obter um pedido previsível é usar ORDER BY explicitamente.
fonte
LIMIT <count> OFFSET <skip>
é mais claro. Obrigado.A última é uma sintaxe alternativa com uma ressalva :
fonte
Fiz alguns testes e não há diferença no desempenho.
Isso é apenas para compatibilidade com outras linguagens sql.
O tempo de execução das duas versões é o mesmo.
Criei sqlite db com table1 com 100000 linhas. Eu corro próximo teste
Os tempos variam de 0,001 segundo
fonte