1. 程式人生 > >各個資料庫的無order by時的預設排序

各個資料庫的無order by時的預設排序

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

--------------------- 本文來自 literary--giant 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/u014682191/article/details/53067908?utm_source=copy