1. 程式人生 > >圖形式理解myisam和innodb索引區別

圖形式理解myisam和innodb索引區別

mysql兩大主要引擎為myisam和innodb,那這兩個引擎有什麼區別呢?

我們先新建兩個除了引擎不同其他完全相同的表。

磁碟檔案:

MyIsam表的磁碟檔案有三個,(以表名為 table_myisam 為例)

  1. table_myisam.frm      (儲存表結構:  FoRM)
  2. table_myisam.MYI     (儲存索引    MYisam Index)
  3. table_myisam.MYD      (儲存資料   MYisam Data)

Innodb表的磁碟檔案有三個,(以表名為 table_Innodb 為例)

  1. table_Innodb.frm      (儲存表結構  FoRM)
  2. table_Innodb.ibd     (儲存索引和資料   InoodB Data)

---------------------------------------------

資料儲存

MyIsam:索引和資料是分離的,索引儲存的是資料的實體地址(非聚簇索引),資料可以是離散的,如圖:

(圖片均來源網路)

Innodb:索引和資料是放在一塊的,索引的葉子節點順序儲存了資料本身,而不是資料的實體地址(聚簇索引),如圖:

 

---------------------------------------------

索引結構

當有多個索引時:

MyIsam:每個索引儲存的都是資料的實際地址

 

優點:不管從什麼索引搜尋,都會直接定位到磁碟檔案地址

缺點:當增刪改資料時導致資料磁碟實體地址變更時,需要維護所有索引

Innodb:輔助索引上儲存的是主鍵索引的值,也就是用非主鍵索引查詢資料時,先通過輔助索引的值找到主鍵索引的值,再通過主鍵索引尋找資料,當無主鍵時,mysql自動建立一個隱藏的預設的6位整數作為主索引。

優點:當增刪改資料時導致資料磁碟實體地址變更時不需要維護所有索引,大大減少了維護索引所花的時間

缺點:所有索引找到的是對應的主鍵值,需要再根據主鍵找實際資料。

點選這裡檢視博主其他部落格