Kürzlich habe ich herausgefunden, dass MySQL eine offset
Funktion hat. Ich habe versucht, eine Dokumentation über die Ergebnisse des Versatzes oder den Unterschied zwischen dem Versatz und der Grenzwertvariante zu finden, aber ich kann anscheinend nicht finden, wonach ich suche.
Nehmen wir an, ich habe 10.000 Zeilen in einer Tabelle und möchte 25 Ergebnisse aus Zeile 1.000. Soweit ich bisher gekommen bin, konnte ich beides tun, um das gleiche Ergebnis zu erzielen:
SELECT id,name,description FROM tablename LIMIT 1000,25
SELECT id,name,description FROM tablename LIMIT 25 OFFSET 1000
Was ich gerne wissen würde, ist der Unterschied zwischen den beiden.
- Tut das tatsächlich dasselbe oder ist mein Verständnis falsch?
- Ist man in größeren Tabellen langsamer / schneller
- Ändert sich das Ergebnis des Versatzes, wenn ich es tue
WHERE column=1
(sagen wir, die Spalte hat> 100 verschiedene Werte) - Ändert sich das Ergebnis des Versatzes, wenn ich es tue
ORDER BY column ASC
(vorausgesetzt, es hat zufällige Werte)?
Wenn dies eine "dumme" Frage ist und jemand eine Dokumentation kennt, die das Thema aufklärt, fügen Sie diese bitte in die Antworten ein.
Ich habe das Gefühl, dass der Versatz die ersten X Zeilen in der Datenbank überspringt, ohne Rücksicht auf die Sortierung und das Wo.
Antworten:
In Bezug auf den Betrieb
Es gibt absolut keinen Unterschied in den Aussagen
@ Sirides Kommentar ist genau der Punkt.
Aus derselben Dokumentation
IHRE TATSÄCHLICHEN FRAGEN
Da beide Abfragen gleich sind, gibt es keinen Unterschied
Die Verwendung
LIMIT
ändert keine Ergebnismengen. Sie navigieren einfach innerhalb der Ergebnismenge.Diese Abfrage
wäre anders als
weil das LIMIT zu einem anderen Zeitpunkt angewendet wird.
Die erste Abfrage gibt nichts zurück, wenn der Tabellenname weniger als 1000 Zeilen enthält
Die zweite Abfrage gibt nichts zurück, wenn die Unterabfrage weniger als 1000 Zeilen enthält
FAZIT
Sie müssen die Abfrage modellieren, um sicherzustellen, dass Sie die Daten zum richtigen Zeitpunkt sortieren
quelle