mysql查詢的時候默認排序不是主鍵自增的順序?

一直都有一種錯覺,認爲查詢出來的數據如果沒有設置排序的話,就是按照id(主鍵)自增的順序排列,也就是id的正序排列。但是偶然的一個機會,發現瞭如果沒有加排序的話,出現的不是想象中的自增順序(邏輯順序),那是什麼順序呢?答案就是物理存儲順序。

雖然一般情況,物理順序和邏輯順序保持一致,但是有個前提,那就是再你不刪不改的情況下。如果你細心觀察過會發現,當你進行大量的刪除操作的時候,雖然數據量會減少,但是所佔用的空間並沒有減少。這些空間會在新數據插入的時候被利用起來,這就是爲什麼我們沒有使用排序查詢數據的時候,會出現與預期不一樣的結果。

例如我們數據表中插入了id爲1-10的數據,此時我們刪除1,然後插入11,那麼此時物理順序是什麼?應該是2,3…,11,還是11,2,3…呢?這就需要看刪除的1的空間是否能夠容納數據11的插入,如果能夠,就會在原來1的空間上插入數據11,如果不能,就另闢新的空間插入11。

整理表碎片
因此並不是刪除的空間都能夠被利用起來,爲了提高空間利用率,我們應該學會整理這些表碎片。

optimize table table_name
1
查詢的時候記得排序
由於邏輯順序和物理順序並非永遠一致,所以我們在查詢數據的時候記得帶上order,確保查詢出來的數據的順序跟你想要的順序一致。

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