Recientemente descubrí que MySQL tiene una offset
función. He estado tratando de encontrar documentación sobre los resultados del desplazamiento, o la diferencia entre el desplazamiento y la variante límite, pero parece que no puedo encontrar lo que estoy buscando.
Digamos que tengo 10.000 filas en una tabla y quiero 25 resultados, de la fila 1.000. Hasta donde llegué hasta ahora, podría hacer ambas cosas para obtener el mismo resultado:
SELECT id,name,description FROM tablename LIMIT 1000,25
SELECT id,name,description FROM tablename LIMIT 25 OFFSET 1000
Lo que me gustaría saber es la diferencia entre los dos.
- ¿Esto realmente hace lo mismo o entiendo mal?
- Es uno más lento / más rápido en tablas más grandes
- ¿El resultado del desplazamiento cambia cuando lo hago
WHERE column=1
(digamos que la columna tiene> 100 valores diferentes) - ¿El resultado del desplazamiento cambia cuando lo hago
ORDER BY column ASC
(asumiendo que tiene valores aleatorios)
Si esta es una pregunta 'estúpida' y alguien conoce alguna documentación que aclare el tema, agréguela en las respuestas.
Tengo la sensación de que el desplazamiento omite las primeras X filas encontradas en la base de datos, sin tener en cuenta la clasificación y el dónde.
Respuestas:
En términos de operación
no hay absolutamente ninguna diferencia en las declaraciones
El comentario de @ siride es exactamente el punto.
De la misma documentación
TUS PREGUNTAS REALES
Como ambas consultas son iguales, no hay diferencia
El uso
LIMIT
no cambia ningún conjunto de resultados. Simplemente navegan dentro del conjunto de resultados.Esta consulta
sería diferente de
porque el LÍMITE se aplica en una etapa diferente.
La primera consulta no devuelve nada si tablename tiene menos 1000 filas
La segunda consulta no devuelve nada si la subconsulta tiene menos 1000 filas
CONCLUSIÓN
Tendrá que esculpir la consulta para asegurarse de que está ordenando los datos en la etapa correcta
fuente