什麼會導致SQL Server 2005以不同的順序返回SELECT
的結果。哪些情況會導致select返回不同的訂單
注意: 我不知道,如果該事項,但查詢有一個非唯一列的Order by
條款(日期欄要具體)和表是一個臨時表。
編輯: 我知道,如果我不會指定它的順序是沒有保證的,但平時基本一致,直到事情發生。
我想知道這會發生什麼「事情」。
謝謝。
什麼會導致SQL Server 2005以不同的順序返回SELECT
的結果。哪些情況會導致select返回不同的訂單
注意: 我不知道,如果該事項,但查詢有一個非唯一列的Order by
條款(日期欄要具體)和表是一個臨時表。
編輯: 我知道,如果我不會指定它的順序是沒有保證的,但平時基本一致,直到事情發生。
我想知道這會發生什麼「事情」。
謝謝。
如果按非唯一列進行排序,那麼在對該列進行保證排序後,給定組內的行的順序不保證 - 正如awm所說的那樣,取決於數據庫。插入可以更改順序,連接可以更改順序,更新可能會更改順序。
如果您需要保證訂單,請在您的order by
中指定一組保證訂單的列。
如果在ORDER BY
列中有重複的值,那麼這些值的順序是未定義的。訂單是數據庫發現最方便的任何事情,並且可以隨時因任何原因而更改。
謝謝,但請參閱編輯。 – 2011-02-15 09:33:25
即使是內部垃圾收集,東西也可能是任何東西,但它很可能是表更新或優化。 – awm 2011-02-15 09:40:46
說不過去,爲什麼它應該改變並不重要,如果有的話。
查詢引擎特定文檔訂單是未指定如果您沒有實際指定它。
一如既往,依靠無證行爲的一般建議是不要做!
原因,它可能會改變(毫無疑問的是別人的,但爲什麼你的運氣?):
你說
我知道訂單不是 保證如果我不指定它,但 它通常一致,直到 發生。
我想你的意思是說
我知道,爲了不 保證,如果我不指定,所以 它總是不可靠的,無論怎樣 一致的外觀。
任何影響查詢優化程序關於執行計劃的決定都會改變無序行的順序。
更新如何更改訂單? – 2011-02-15 09:34:18