myisam和innodb 都是採用 b+tree這種資料結構來實現 b-tree索引。而很大的區別在於,innodb 儲存引擎採用「聚集索引」的資料儲存方式實現b-tree索引,所謂「聚集」,就是指資料行和相鄰的鍵值緊湊地儲存在一起,注意 innodb 只能聚集乙個葉子頁(16k)的記錄(即聚集索引滿足一定的範圍的記錄),因此包含相鄰鍵值的記錄可能會相距甚遠。
myisam索引檔案和資料檔案是分離的,索引檔案僅儲存資料記錄的位址。而在innodb中,表資料檔案本身就是按b+tree組織的乙個索引結構,這棵樹的葉節點data域儲存了完整的資料記錄。同時innodb的次索引指向對主鍵的引用,myisam的次索引和主索引都指向物理
因為myisam相對簡單所以在效率上要優於innodb.如果系統讀多,寫少。對原子性要求低。那麼myisam是最好的選擇。且myisam恢復速度快。可直接用備份覆蓋恢復。如果系統讀少,寫多的時候,尤其是併發寫入高的時候。innodb就是首選了。
兩種型別都有自己優缺點,選擇那個完全要看自己的實際類弄。
innodb的資料檔案本身就是主索引檔案。而myisam的主索引和資料是分開的。
innodb的輔助索引data域儲存相應記錄主鍵的值而不是位址。而myisam的輔助索引和主索引沒有多大區別。
innodb是聚簇索引,資料掛在逐漸索引之下。
myisam使用的是表鎖
innodb使用行鎖
myisam沒有事務支援和mvcc
innodb支援事務和mvcc
myisam支援fulltext型別的全文索引
innodb不支援fulltext型別的全文索引,但是innodb可以使用sphinx外掛程式支援全文索引,並且效果更好
myisam允許沒有任何索引和主鍵的表存在,索引都是儲存行的位址
innodb如果沒有設定主鍵或非空唯一索引,就會自動生成乙個6位元組的主鍵,資料是主索引的一部分,附加索引儲存的是主索引的值
myisam不支援
innodb支援
MySQL儲存引擎之MyISAM與Innodb
1 mysql5.5之前版本預設儲存引擎 2 myisam是大部分系統表和臨時表使用的儲存引擎,這裡的臨時表是指在排序 分組等操作中,當數量超過一定的大小之後,由查詢優化器建立的臨時表 3 myisam儲存引擎會將表儲存在兩個系統檔案中,乙個是資料檔案,以myd為副檔名 另乙個是索引檔案,以myi為...
儲存引擎是什麼?常用的MyISAM和InnoDB
什麼是儲存引擎?mysql中的資料用各種不同的技術儲存在檔案 或者記憶體 中。這些技術中的每一種技術都使用不同的儲存機制 索引技巧 鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,你能夠獲得額外的速度或者功能,從而改善你的應用的整體功能。myisam 這種儲存引擎是基於isam儲存引...
關於MySQL儲存引擎雜談
原文 引擎 engine 是電子平台上開發程式或系統的核心元件。利用引擎,開發者可迅速建立 鋪設程式所需的功能,或利用其輔助程式的運轉。一般而言,引擎是乙個程式或一套系統的支援部分。常見的程式引擎有遊戲引擎,搜尋引擎,防毒引擎等。好了我們知道引擎就是乙個程式的核心元件。簡單來說,儲存引擎就是指表的型...