圖形式理解myisam和innodb索引區別
阿新 • • 發佈:2018-11-15
mysql兩大主要引擎為myisam和innodb,那這兩個引擎有什麼區別呢?
我們先新建兩個除了引擎不同其他完全相同的表。
磁碟檔案:
MyIsam表的磁碟檔案有三個,(以表名為 table_myisam 為例)
- table_myisam.frm (儲存表結構: FoRM)
- table_myisam.MYI (儲存索引 MYisam Index)
- table_myisam.MYD (儲存資料 MYisam Data)
Innodb表的磁碟檔案有三個,(以表名為 table_Innodb 為例)
- table_Innodb.frm (儲存表結構 FoRM)
- table_Innodb.ibd (儲存索引和資料 InoodB Data)
---------------------------------------------
資料儲存
MyIsam:索引和資料是分離的,索引儲存的是資料的實體地址(非聚簇索引),資料可以是離散的,如圖:
(圖片均來源網路)
Innodb:索引和資料是放在一塊的,索引的葉子節點順序儲存了資料本身,而不是資料的實體地址(聚簇索引),如圖:
---------------------------------------------
索引結構
當有多個索引時:
MyIsam:每個索引儲存的都是資料的實際地址
優點:不管從什麼索引搜尋,都會直接定位到磁碟檔案地址
缺點:當增刪改資料時導致資料磁碟實體地址變更時,需要維護所有索引
Innodb:輔助索引上儲存的是主鍵索引的值,也就是用非主鍵索引查詢資料時,先通過輔助索引的值找到主鍵索引的值,再通過主鍵索引尋找資料,當無主鍵時,mysql自動建立一個隱藏的預設的6位整數作為主索引。
優點:當增刪改資料時導致資料磁碟實體地址變更時不需要維護所有索引,大大減少了維護索引所花的時間
缺點:所有索引找到的是對應的主鍵值,需要再根據主鍵找實際資料。