2013-03-20 27 views
4

我正在使用以下查詢來查詢在兩列上排序的數據庫。SQL訂單條款保證穩定(按標準)

SELECT a,b,c from Table1 Order by a asc,b asc;

我的問題是,排序是否保證穩定(通過標準)或不。雖然它沒有爲它是任何意義上的,而不是穩定的,但我問這個,因爲我在網,

標準並不妨礙使用一個穩定的排序讀,但它也確實 不需要它。

+0

我認爲這種說法是正確的。以下書中的內容相同:http://books.google.de/books?id=ckdkPZcNsG8C&pg=PA302&lpg=PA302&dq=ansi+SQL+%22order+by%22+stable&source=bl&ots=xCyKgxvy63&sig=9AmKO9uKHxEDDHOpwmjj_RZEkOE&hl=zh-CN&sa=X&ei=bKNJUbGcDoSltAb1mYHICQ&sqi = 2&ved = 0CDsQ6AEwAw#v = onepage&q = ansi%20SQL%20%22order%20by%22%20stable&f = false – 2013-03-20 11:55:46

+0

我想這是依賴於實現的。你在使用哪個SQL? – 2013-03-20 12:02:34

+0

沒有關於標準的知識:),我可以說,排序不需要穩定。想象一下行,對於可排序字段具有相同的值 - 它們的排序是未確定的。 – Arvo 2013-03-20 12:10:57

回答

8

排序不保證穩定。我認爲,在SQL Server documentation對如何實現一個穩定的排序了很好的解釋:

要實現查詢請求之間穩定的結果使用膠印和 FETCH,以下條件必須滿足: 的基礎數據是查詢使用的內容不得更改。也就是說,通過查詢觸摸 的行不會更新,或者查詢 中的頁面的所有請求都使用快照或可串行化事務隔離在單個事務中執行。有關這些事務隔離級別的更多信息,請參閱SET TRANSACTION ISOLATION LEVEL (Transact-SQL)。 ORDER BY子句包含保證爲唯一的列或組合列 。

最簡單的方法來了解一個排序是穩定的去回表的定義。在SQL中,表本質上是無序的。所以,沒有爲了「穩定」而回歸的問題。

作爲第二個考慮,排序可以並行實施。在大多數並行排序中,常用鍵彙集在一起​​,沒有關於它們原始順序的信息(除非在排序鍵中明確或隱含地實現該排序)。