Recentemente eu descobri que o MySQL tem um offset
recurso. Eu tenho tentado encontrar documentação sobre os resultados do deslocamento, ou a diferença entre o deslocamento e a variante limite, mas não consigo encontrar o que estou procurando.
Digamos que tenho 10.000 linhas em uma tabela e quero 25 resultados, a partir da linha 1.000. Tanto quanto cheguei até aqui, 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 / mais rápido em tabelas maiores
- O resultado do deslocamento muda quando o faço
WHERE column=1
(digamos, a coluna tem> 100 valores diferentes) - O resultado da compensação muda quando eu faço
ORDER BY column ASC
(desde que tenha valores aleatórios)
Se essa é uma pergunta "estúpida" e alguém conhece alguma documentação que ilumine o assunto, adicione-a nas respostas.
Tenho a sensação de que o deslocamento ignora as primeiras X linhas encontradas no banco de dados, desconsiderando a classificação e o local.
Respostas:
Em termos de operação
não há absolutamente nenhuma diferença nas declarações
O 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 retornará nada se o nome da tabela tiver menos 1000 linhas
A segunda consulta não retornará nada se a subconsulta tiver menos de 1000 linhas
CONCLUSÃO
Você precisará esculpir a consulta para ter certeza de que está classificando os dados no estágio certo
fonte