Récemment, j'ai découvert que MySQL a une offset
fonctionnalité. J'ai essayé de trouver de la documentation sur les résultats de l'offset, ou la différence entre l'offset et la variante de limite, mais je n'arrive pas à trouver ce que je cherche.
Disons que j'ai 10 000 lignes dans une table et que je veux 25 résultats, à partir de la ligne 1 000. Pour autant que je suis arrivé jusqu'ici, je pouvais faire les deux pour obtenir le même résultat:
SELECT id,name,description FROM tablename LIMIT 1000,25
SELECT id,name,description FROM tablename LIMIT 25 OFFSET 1000
Ce que j'aimerais savoir, c'est la différence entre les deux.
- Est-ce que cela fait la même chose ou est-ce que ma compréhension est fausse?
- Est un plus lent / plus rapide dans les grandes tables
- Le résultat du décalage change-t-il quand je le fais
WHERE column=1
(disons que la colonne a> 100 valeurs différentes) - Le résultat du décalage change-t-il quand je le fais
ORDER BY column ASC
(en supposant qu'il a des valeurs aléatoires)
S'il s'agit d'une question «stupide» et que quelqu'un connaît des documents éclairant le sujet, veuillez les ajouter dans les réponses.
J'ai l'impression que l'offset saute les premières lignes X trouvées dans la base de données, sans tenir compte du tri et de l'endroit.
Réponses:
En termes de fonctionnement
il n'y a absolument aucune différence dans les déclarations
Le commentaire de @ siride est exactement le point.
De la même documentation
VOS QUESTIONS RÉELLES
Étant donné que les deux requêtes sont identiques, il n'y a aucune différence
L'utilisation
LIMIT
ne modifie aucun jeu de résultats. Ils naviguent simplement dans l'ensemble de résultats.Cette requête
serait différent de
parce que la LIMITE est appliquée à un stade différent.
La première requête ne renvoie rien si le nom de la table contient moins de 1 000 lignes
La deuxième requête ne renvoie rien si la sous-requête comporte moins de 1 000 lignes
CONCLUSION
Vous devrez sculpter la requête pour vous assurer que vous triez les données au bon stade
la source