關於Mysql的儲存引擎Innodb和Myisam

2021-09-26 22:21:56 字數 965 閱讀 2779

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 是電子平台上開發程式或系統的核心元件。利用引擎,開發者可迅速建立 鋪設程式所需的功能,或利用其輔助程式的運轉。一般而言,引擎是乙個程式或一套系統的支援部分。常見的程式引擎有遊戲引擎,搜尋引擎,防毒引擎等。好了我們知道引擎就是乙個程式的核心元件。簡單來說,儲存引擎就是指表的型...