2012-06-12 91 views

回答

9

查詢的順序可以通過在語句中使用'Order by'子句來強制執行。一個SQL數據庫實際上並不瞭解你以什麼順序放入或按給定順序存儲數據。這意味着,你需要告訴SQL什麼順序要在項目例如:

Select * from Table 
    order by column1 desc 

想想看像給一些東西給你的朋友舉行 - 之後她將所有的它適合你,但她同時將它存儲在某個地方。當你不想爲其他東西騰出空間時,她可能會移動它,或者可能會按照您給予她的順序將它交回,但是您沒有告訴她要保持順序,所以她沒有。

數據庫需要能夠在後臺移動東西,因此它們的構建方式本質上並不瞭解任何順序 - 當您將它提供給數據庫時,您需要知道順序,以便可以將它會按照您稍後想要的順序恢復。 order子句允許SQL對數據施加一個順序,但它不記住或自己擁有一個順序。

重要點:即使SQL以正確的順序返回項目時沒有按最後一次100萬次的語句順序,它也不能保證它會這樣做。即使表中存在聚集索引,結果也不能保證以您期望的順序返回。特別是當SQL版本發生變化時,不明確地使用order by子句可能會破壞假設查詢將按照他們想要的順序的程序!

+3

我喜歡「重要的一點」 - 這對於瞭解您是否希望避免未來的錯誤至關重要! – Simon

+1

+1 - 簡潔明瞭的答案。最近有很多「插入順序」問題。 – Lamak

+0

如果我們可以從現在開始將這些問題合併到一起,並且在一百萬個地方對同一個問題沒有很好的答案,那將會很棒! –

2

預期插入順序的結果是一種常見的誤解。即使使用聚集索引,結果集也可能不如預期的那樣。唯一強制執行命令的方法是使用「order by」子句。訂單與預期不同的原因可能會有所不同。查詢可以並行執行,結果集可能會合並,也可能是由於查詢優化計劃,而嘗試儘可能快地返回結果集。

相關問題