2009-06-21 10 views
1

Ich bin neu in MySQL, aber ich habe Oracle seit einiger Zeit verwendet. Ich bin etwas verwirrt über MySQL LIMIT Stichwort. Bedeutet dieses Schlüsselwort, dass die Reihenfolge der zurückgegebenen Daten bei jeder Ausführung der Abfrage gleich ist? Was passiert, wenn den Tabellen, die die Abfrage betreffen, mehr Daten hinzugefügt werden? Und wie würden die Daten bestellt, wenn keine Order-by-Klausel existiert?Hinterfragt das LIMIT-Schlüsselwort die Reihenfolge der zurückgegebenen Daten?

Antwort

4

Nein, LIMIT ist nicht deterministisch. Die Reihenfolge hängt von den Daten ab, welche Indizes verwendet werden, interne Änderungen zwischen MySQL-Versionen, Reihenfolge der Daten auf der Festplatte usw.

Normalerweise würden Sie LIMIT mit einem ORDER BY kombinieren, um dies zu vermeiden.

1

Wenn Sie ORDER BY nicht angeben, gibt es keine Garantie dafür, welche Zeilen zuerst zurückgegeben werden.

In der Praxis entspricht die Reihenfolge jedoch normalerweise der Clustered-Index-Reihenfolge und wird zwischen den Aufrufen nicht variieren. Verlassen Sie sich nicht auf dieses Verhalten.

2

LIMIT wird den zurückgegebenen Daten keine Reihenfolge auferlegen.

Es gibt keine Garantie, dass Limit bei jeder Ausführung die gleiche Reihenfolge zurückgibt, es sei denn, eine ORDER BY-Klausel wird verwendet. Wenn Daten eingefügt werden, kann dies Auswirkungen auf die Ergebnisse der geordneten und ungeordneten Ergebnisse haben.

Wenn Sie eine ORDER BY-Klausel weglassen, liegt es grundsätzlich an der Datenbank, die Reihenfolge zu bestimmen, und sie basiert wahrscheinlich auf der Indexierung der Tabelle. Dies wird sich mit der Zeit ändern, wenn die Tabelle neu indiziert wird und/oder mehr Daten hinzugefügt werden.

Verwandte Themen