2011-02-15 54 views
1

什麼會導致SQL Server 2005以不同的順序返回SELECT的結果。哪些情況會導致select返回不同的訂單

注意: 我不知道,如果該事項,但查詢有一個非唯一列的Order by條款(日期欄要具體)和表是一個臨時表。

編輯: 我知道,如果我不會指定它的順序是沒有保證的,但平時基本一致,直到事情發生。

我想知道這會發生什麼「事情」。

謝謝。

回答

0

如果按非唯一列進行排序,那麼在對該列進行保證排序後,給定組內的行的順序不保證 - 正如awm所說的那樣,取決於數據庫。插入可以更改順序,連接可以更改順序,更新可能會更改順序。

如果您需要保證訂單,請在您的order by中指定一組保證訂單的列。

+0

更新如何更改訂單? – 2011-02-15 09:34:18

1

如果在ORDER BY列中有重複的值,那麼這些值的順序是未定義的。訂單是數據庫發現最方便的任何事情,並且可以隨時因任何原因而更改。

+0

謝謝,但請參閱編輯。 – 2011-02-15 09:33:25

+0

即使是內部垃圾收集,東西也可能是任何東西,但它很可能是表更新或優化。 – awm 2011-02-15 09:40:46

0

說不過去,爲什麼它應該改變並不重要,如果有的話。

查詢引擎特定文檔訂單是未指定如果您沒有實際指定它。

一如既往,依靠無證行爲的一般建議是不要做

原因,它可能會改變(毫無疑問的是別人的,但爲什麼你的運氣?):

  • 查詢
  • 陳舊的指標得到更新
  • 維護重新編譯已在服務器上運行,重建索引
0

你說

我知道訂單不是 保證如果我不指定它,但 它通常一致,直到 發生。

我想你的意思是說

我知道,爲了不 保證,如果我不指定,所以 它總是不可靠的,無論怎樣 一致的外觀。

任何影響查詢優化程序關於執行計劃的決定都會改變無序行的順序。

相關問題