SQL Server 2008 與 2012:SELECT 查詢行順序差異
問題:
從 SQL Server 2008 升級到 SQL Server 2012 發現了一個關鍵差異:不含 SELECT
子句的 ORDER BY
查詢中的預設行順序。雖然 SQL Server 2008 通常以看似一致的順序傳回一行,但 SQL Server 2012 並沒有提供這樣的保證。
影響:
此變更顯著影響依賴此隱式排序的應用程序,特別是影響跨 5 個資料庫的 2500 多個預存程序。 全面添加 ORDER BY
子句是不切實際的。 開發人員正在尋求有效的解決方案,甚至考慮降級到 SQL Server 2008。
為什麼明確排序至關重要:
不建議降級。 對預設行順序的期望從根本上來說是有缺陷的。 SQL 對集合進行操作,而集合本質上缺乏固有的順序。正如 Itzik Ben-Gan 在「Microsoft SQL Server 2012 T-SQL 基礎知識」中所強調的那樣,除非明確排序,否則查詢結果是無序的。
隱式順序的不可預測性:
開發人員必須始終使用明確的ORDER BY
子句。 查詢最佳化器可能會重新排列操作以提高效能,從而可能改變任何感知的預設順序。
一致行順序的最佳實務:
為了確保可預測的結果:
ORDER BY
語句中包含 SELECT
。 ORDER BY
,不同查詢計劃的順序也可能會有所不同,尤其是在並行執行時。 以上是SQL Server 2008 與 SQL Server 2012 SELECT 查詢之間的行順序有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!