SQL Server 2008 vs. 2012: Diskrepanzen in der Reihenfolge der SELECT-Abfragezeilen
Das Problem:
Das Upgrade von SQL Server 2008 auf SQL Server 2012 hat einen entscheidenden Unterschied ergeben: die Standardzeilenreihenfolge in SELECT
-Abfragen ohne eine ORDER BY
-Klausel. Während SQL Server 2008 Zeilen oft in einer scheinbar konsistenten Reihenfolge zurückgab, bietet SQL Server 2012 keine solche Garantie.
Die Auswirkungen:
Diese Änderung wirkt sich erheblich auf Anwendungen aus, die auf dieser impliziten Reihenfolge basieren, insbesondere auf über 2500 gespeicherte Prozeduren in 5 Datenbanken. Eine pauschale Hinzufügung von ORDER BY
-Klauseln ist unpraktisch. Entwickler suchen nach effizienten Lösungen und erwägen sogar ein Downgrade auf SQL Server 2008.
Warum eine explizite Bestellung wichtig ist:
Ein Downgrade wird nicht empfohlen. Die Erwartung einer Standardzeilenreihenfolge ist grundsätzlich fehlerhaft. SQL arbeitet mit Mengen, und Mengen fehlt von Natur aus die inhärente Ordnung. Wie Itzik Ben-Gan in „Microsoft SQL Server 2012 T-SQL Fundamentals“ hervorhebt, sind Abfrageergebnisse ungeordnet, sofern sie nicht explizit sortiert werden.
Die Unvorhersehbarkeit impliziter Ordnung:
Entwickler müssen immer explizite ORDER BY
-Klauseln verwenden. Der Abfrageoptimierer ordnet Vorgänge möglicherweise aus Gründen der Leistung neu an und ändert möglicherweise die wahrgenommene Standardreihenfolge.
Best Practices für eine konsistente Zeilenreihenfolge:
Um vorhersehbare Ergebnisse zu gewährleisten:
ORDER BY
in SELECT
-Anweisungen ein, bei denen die Zeilenreihenfolge relevant ist.ORDER BY
die Reihenfolge je nach Abfrageplan variieren kann, insbesondere bei paralleler Ausführung.Das obige ist der detaillierte Inhalt vonWie unterscheidet sich die Zeilenreihenfolge zwischen SQL Server 2008- und SQL Server 2012-SELECT-Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!