數據庫默認排序

Oracle:
oracle對無order by的語句返回的結果不進行排序,oracle此時的處理方式是按照數據的物理存儲順序來讀取數據。因爲rowid是每行數據的地址,所以有時候看起來會像是使用rowid排序的。但這個順序是可能被打亂的,在表的數據被刪除後,rowid會被新插入的數據佔用。所以一個無order by查詢結果看起來也可能是個雜亂無章的。oracle的數據庫實現就一個原則,怎麼快怎麼效率高就怎麼來。大多數情況下不需要排序還非得按主鍵排序這不是浪費資源麼?這和oracle的表結構是有關係的,因爲oracle的表結構默認是按堆存放的。按堆存放的意思就是,隨便存,存的時候就是亂序的。如果你建表的時候就是建的按索引組織的表,那麼它返回的時候就會默認排序了。
 

sqlserver:

在不指定Order by的情況下,sqlserver會根據執行計劃實際查詢方式來得到數據,而執行計劃會根據sql中很多的因素(的查詢列,where條件,order by等)而使用不同的索引,最終出來的結果很可能是不同的。


MySQL:
對於 MyISAM 表 ,Select 默認排序是按照物理存儲順序顯示的。

而InnoDB 表,會按主鍵的順序排列。


總結:
任何時候要排序就要加上order by

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章