1. 程式人生 > >如何理解MySQL的底層中資料結構索引MyISAM和InnoDB的區別?

如何理解MySQL的底層中資料結構索引MyISAM和InnoDB的區別?

(一)先對MyISAM和InnoDB有一個簡單的對比認識

1. MyIsam是非聚集索引(其實MyIsam引擎就是索引和資料分離的索引單獨放在一個XX.MYI檔案中,資料單獨放在一個XX.MYD檔案中),InnoDB就是聚集索引(其實就是他的資料和索引就是在一個XX.IDB檔案中),或者說MyIsam他尋找索引的時候可以直接定位到索引就可以拿到資料,但是InnoDB就不行,他只能去BTree的葉子節點中去拿到資料
在這裡插入圖片描述

在這裡插入圖片描述

1).[事務]MyISAM是非事務安全型的,而InnoDB是事務安全型的,預設開啟自動提交,宜合併事務,一同提交,減小資料庫多次提交導致的開銷,大大提高效能。
2).[]MyISAM鎖的粒度是表級,而InnoDB支援行級鎖定。
3).[全文索引

]MyISAM支援全文型別索引,而InnoDB不支援全文索引。
4).[查詢效率]MyISAM相對簡單,所以在效率上要優於InnoDB,小型應用可以考慮使用MyISAM。
5).[外健]MyISAM不支援外健,InnoDB支援。
6).[count]MyISAM保有表的總行數,InnoDB只能遍歷。6).MyISAM表是儲存成檔案的形式,在跨平臺的資料轉移中使用MyISAM儲存會省去不少的麻煩。
7).InnoDB表比MyISAM表更安全,可以在保證資料不會丟失的情況下,切換非事務表到事務表(alter table tablename type=innodb)

總結:兩種索引的引擎方式都是支援B+Tree的底層實現方式的

(二)聊一下InnoDB的優點

因為InnoDB的資料檔案本身要按主鍵聚集,所以InnoDB要求表必須有主鍵(MyISAM可以沒有),如果沒有顯式指定,則MySQL系統會自動選擇一個可以唯一標識資料記錄的列作為主鍵,如果不存在這種列,則MySQL自動為InnoDB表生成一個隱含欄位作為主鍵,這個欄位長度為6個位元組,型別為長整形。