資料庫select的預設排序

2021-06-09 05:14:49 字數 898 閱讀 4384

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開始...