Recentemente descobri que o MySQL tem um offset
recurso. Tenho tentado encontrar documentação sobre os resultados do deslocamento ou a diferença entre o deslocamento e a variante de limite, mas não consigo encontrar o que estou procurando.
Digamos que eu tenha 10.000 linhas em uma tabela e quero 25 resultados, da linha 1.000. Tanto quanto eu cheguei até agora, eu poderia fazer as duas coisas para obter o mesmo resultado:
SELECT id,name,description FROM tablename LIMIT 1000,25
SELECT id,name,description FROM tablename LIMIT 25 OFFSET 1000
O que eu gostaria de saber é a diferença entre os dois.
- Isso realmente faz o mesmo ou meu entendimento está errado?
- É um mais lento/rápido em tabelas maiores
- O resultado do deslocamento muda quando eu faço
WHERE column=1
(digamos que a coluna tenha> 100 valores diferentes) - O resultado do deslocamento muda quando eu faço
ORDER BY column ASC
(supondo que tenha valores aleatórios)
Tenho a sensação de que o deslocamento pula as primeiras linhas X encontradas no banco de dados, desconsiderando a classificação e o local.
Em termos de operação
não há absolutamente nenhuma diferença nas declarações
comentário de siride :
é exatamente o ponto.
Da mesma Documentação
SUAS PERGUNTAS REAIS
Como as duas consultas são iguais, não há diferença
O uso
LIMIT
não altera nenhum conjunto de resultados. Eles simplesmente navegam dentro do conjunto de resultados.esta consulta
seria diferente de
porque o LIMIT está sendo aplicado em um estágio diferente.
A primeira consulta não retorna nada se tablename tiver menos de 1.000 linhas
A segunda consulta não retorna nada se a subconsulta tiver menos de 1.000 linhas
CONCLUSÃO
Você terá que esculpir a consulta para garantir que está classificando os dados no estágio correto