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的字段如果有重複值,必須指定第二排序字段,如果第二排序字段還有重複值,那必須指定更多的字段,直到所有的排序字段能夠指定唯一順序。
Sybase 修改資料庫預設排序
我新建了乙個sybase資料庫,想用dump檔案load,可是報資料庫的排序不對,就去centrol裡面修改,但是還是報錯,說是字符集不存在。辦法如下 開啟命令列,進入到sybase的ase 15 0 bin 目錄下,執行下面的命令 charset p密碼 s伺服器名 nocase.srt utf8...
MySQL的預設資料庫
mysql的認識 預設資料庫有哪些 1.information schema 2.mysql 3.test 4.ewsdoa schema 5.performance schema information schema 儲存了mysql服務所有資料庫的資訊。具體mysql服務有多少個資料庫,各個資料...
Firebird資料庫的Select語句
select first 10 skip 8 from t data 跳過前8行不要,取10行,即取第9行到18行共10行 select first 10 from t data 取前10行 select from t data rows 11 to 20 取第11行到20行,共10行,行數從0開始...