數據結構
MyIsam和InnoDB 都是採用 B+Tree這種數據結構來實現 B-Tree索引。而很大的區別在於,InnoDB 存儲引擎採用“聚集索引”的數據存儲方式實現B-Tree索引,所謂“聚集”,就是指數據行和相鄰的鍵值緊湊地存儲在一起,注意 InnoDB 只能聚集一個葉子頁(16K)的記錄(即聚集索引滿足一定的範圍的記錄),因此包含相鄰鍵值的記錄可能會相距甚遠。
MyISAM索引文件和數據文件是分離的,索引文件僅保存數據記錄的地址。而在InnoDB中,表數據文件本身就是按B+Tree組織的一個索引結構,這棵樹的葉節點data域保存了完整的數據記錄。同時Innodb的次索引指向對主鍵的引用,Myisam的次索引和主索引都指向物理
Innodb與Myisam應用場景
因爲MyISAM相對簡單所以在效率上要優於InnoDB.如果系統讀多,寫少。對原子性要求低。那麼MyISAM最好的選擇。且MyISAM恢復速度快。可直接用備份覆蓋恢復。如果系統讀少,寫多的時候,尤其是併發寫入高的時候。InnoDB就是首選了。
兩種類型都有自己優缺點,選擇那個完全要看自己的實際類弄。
InnoDB索引和MyISAM索引的區別
存儲結構(主索引/輔助索引)
- InnoDB的數據文件本身就是主索引文件。而MyISAM的主索引和數據是分開的。
- InnoDB的輔助索引data域存儲相應記錄主鍵的值而不是地址。而MyISAM的輔助索引和主索引沒有多大區別。
- innoDB是聚簇索引,數據掛在逐漸索引之下。
鎖
- MyISAM使用的是表鎖
- InnoDB使用行鎖
事務
- MyISAM沒有事務支持和MVCC
- InnoDB支持事務和MVCC
全文索引
- MyISAM支持FULLTEXT類型的全文索引
- InnoDB不支持FULLTEXT類型的全文索引,但是InnoDB可以使用sphinx插件支持全文索引,並且效果更好
主鍵
- MyISAM允許沒有任何索引和主鍵的表存在,索引都是保存行的地址
- InnoDB如果沒有設定主鍵或非空唯一索引,就會自動生成一個6字節的主鍵,數據是主索引的一部分,附加索引保存的是主索引的值
外鍵
- MyISAM不支持
- InnoDB支持