關於Mysql的存儲引擎Innodb和Myisam

數據結構

        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索引的區別

存儲結構(主索引/輔助索引)

  1. InnoDB的數據文件本身就是主索引文件。而MyISAM的主索引和數據是分開的。
  2. InnoDB的輔助索引data域存儲相應記錄主鍵的值而不是地址。而MyISAM的輔助索引和主索引沒有多大區別。
  3. innoDB是聚簇索引,數據掛在逐漸索引之下。

 鎖

  1. MyISAM使用的是表鎖
  2. InnoDB使用行鎖

 事務

  1. MyISAM沒有事務支持和MVCC
  2. InnoDB支持事務和MVCC

全文索引

  1. MyISAM支持FULLTEXT類型的全文索引
  2. InnoDB不支持FULLTEXT類型的全文索引,但是InnoDB可以使用sphinx插件支持全文索引,並且效果更好

主鍵

  1. MyISAM允許沒有任何索引和主鍵的表存在,索引都是保存行的地址
  2. InnoDB如果沒有設定主鍵或非空唯一索引,就會自動生成一個6字節的主鍵,數據是主索引的一部分,附加索引保存的是主索引的值

外鍵

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