Änderung der MySQL/MariaDB-Abfrageoptimierung: Sortieren nach in Unterabfragen
Bei Abfragen mit MySQL 5.5 oder früher wurde die ORDER BY-Klausel einer Unterabfrage angewendet vor dem SELECT der äußersten Abfrage. In MariaDB 10.0.14 hat sich dieses Verhalten jedoch geändert, und ORDER BY-Klauseln für Unterabfragen werden jetzt ignoriert, wenn kein LIMIT vorhanden ist.
Um dieses Problem zu beheben, empfiehlt MariaDB, die ORDER BY-Klausel auf die äußerste Abfrage anzuwenden oder zu verwenden LIMIT in der Unterabfrage.
Dokumentiert Verhalten
In der Dokumentation von MariaDB heißt es, dass Unterabfragen in der FROM-Klausel ungeordnete Sätze von Zeilen sind und ORDER BY-Klauseln in diesem Zusammenhang im Allgemeinen ignoriert werden. Das folgende Zitat aus der Dokumentation liefert weitere Einzelheiten:
„Eine „Tabelle“ (und auch eine Unterabfrage in der FROM-Klausel) ist – gemäß dem SQL-Standard – eine ungeordnete Menge von Zeilen. Zeilen in einer Tabelle (bzw in einer Unterabfrage in der FROM-Klausel) kommen in keiner bestimmten Reihenfolge vor. Deshalb kann der Optimierer die von Ihnen angegebene ORDER BY-Klausel ignorieren. Tatsächlich lässt der SQL-Standard nicht einmal zu, dass die ORDER BY-Klausel erscheint diese Unterabfrage (wir erlauben es, weil ORDER BY ... LIMIT ... das Ergebnis, die Menge der Zeilen und nicht nur ihre Reihenfolge ändert)."
Daher wird empfohlen, Unterabfragen als ungeordnete Mengen zu behandeln und um ORDER BY-Klauseln in den äußersten Abfragen zu platzieren oder bei Bedarf LIMIT zu verwenden.
Das obige ist der detaillierte Inhalt vonWie hat sich die Handhabung von ORDER BY in Unterabfragen durch MariaDB geändert und welche Lösung wird empfohlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!