資料庫select的預設排序

來源:互聯網
上載者:User

 oracle對無order by的語句返回的結果不進行排序,oracle此時的處理方式是按照資料的實體儲存體順序來讀取資料。因為rowid是每行資料的地址,所以有時候看起來會像是使用rowid排序的。但這個順序是可能被打亂的,在表的資料被刪除後,rowid會被新插入的資料佔用。所以一個無order by查詢結果看起來也可能是個雜亂無章的。

 

 Select 語句如果不加 “Order By”, MySQL會怎麼排序呢。

* 不能依賴 MySQL 的預設排序
* 如果你想排序,總是加上 Order By
* GROUP BY 強加了 Order By,

對於 MyISAM 表
MySQL Select 預設排序是按照實體儲存體順序顯示的。(不進行額外排序).
也就是說
SELECT * FROM tbl – 會產生“表掃描”。如果表沒有刪除、替換、更新操作,記錄會顯示為插入的順序。

InnoDB 表
同樣的情況,會按主鍵的順序排列。但是這是不靠譜的。潛規則。

“Select” 不加 “Order by”時, MySQL 會嘗試以儘可能快的方法(MySQL 實際的方法不見得快)返回資料。
由於訪問主鍵、索引大多數情況會快一些(在Cache裡)所以返回的資料有可能以主鍵、索引的順序輸出,
這裡並不會真的進行排序,主要是由於主鍵、索引本身就是排序放到記憶體的,所以連續輸出時可能是某種序列。
在一些情況下消耗硬碟尋道時間最短的資料會先返回。
如果只查詢單個表,在特殊的情況下是有規律的。

最後總結

“Order By 是要加的”

我們對於翻頁等邏輯必須預設加上order by排序,而且order by的欄位如果有重複值,必須指定第二排序欄位,如果第二排序欄位還有重複值,那必須指定更多的欄位,直到所有的排序欄位能夠指定唯一順序。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.