Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum kommen die Ergebnisse einer SQL-Abfrage nicht in der erwarteten Reihenfolge zurück?

Die Reihenfolge einer Abfrage kann durch die Verwendung einer 'Order by'-Klausel in der Anweisung erzwungen werden. Eine SQL-Datenbank versteht nicht wirklich, in welcher Reihenfolge Sie die Dinge anordnen oder die Daten in einer bestimmten Reihenfolge speichern. Das bedeutet, dass Sie SQL mitteilen müssen, in welcher Reihenfolge Sie die Elemente haben möchten. Zum Beispiel:

Select * from Table
  order by column1 desc

Stell es dir vor, als würdest du deiner Freundin ein paar Sachen zum Aufbewahren geben – sie wird später alles für dich haben, aber sie bewahrt es in der Zwischenzeit irgendwo auf. Sie kann es verschieben, während Sie nicht nach Platz für etwas anderes suchen, oder es in der gleichen Reihenfolge zurückgeben, in der Sie es ihr gegeben haben, aber Sie haben ihr nicht gesagt, dass sie es in Ordnung halten soll, also tut sie es nicht .

Datenbanken müssen in der Lage sein, Dinge im Hintergrund zu verschieben, so dass die Art und Weise, wie sie aufgebaut sind, keine Reihenfolge kennt - Sie müssen die Reihenfolge kennen, wenn Sie sie an die Datenbank übergeben, damit Sie sie wieder in die Bestellen Sie später. Die order-Klausel erlaubt es SQL, den Daten eine Reihenfolge aufzuerlegen, aber es merkt sich keine oder hat keine eigene.

Wichtiger Punkt :Selbst wenn SQL die Elemente die letzten 1 Million Mal in der richtigen Reihenfolge ohne eine Order by-Anweisung zurückgegeben hat, kann dies nicht garantiert werden. Selbst wenn ein gruppierter Index in der Tabelle vorhanden ist, ist nicht garantiert, dass die Ergebnisse in der erwarteten Reihenfolge zurückgegeben werden. Insbesondere wenn sich die SQL-Versionen ändern, kann die nicht explizite Verwendung einer order by-Klausel Programme beschädigen, die davon ausgehen, dass die Abfrage in der gewünschten Reihenfolge erfolgt!