1. 程式人生 > >mysql常用儲存引擎簡介

mysql常用儲存引擎簡介

1.InnoDB
從mysql 5.5版本開始,innodb是mysql預設的儲存引擎。innodb具有以下優點
災難恢復性好
支援事務,預設的事務隔離級別是可重複讀,其事務控制是通過多版本併發控制來實現的。
使用行級鎖
對於InnoDB引擎中的表, 其資料的物理組織形式是簇表(Cluster Table) , 資料按主鍵來組織, 也就是說主鍵索引和資料是在一起的, 資料按主鍵的順序物理分佈。 資料表的另一種常見形式是非簇表, 其索引是有序的, 而資料是無序的。
實現了緩衝管理, 不僅能緩衝索引也能緩衝資料, 並且會自動建立雜湊索引以加快資料的獲取。 相比之下, MyISAM只是快取了索引。
支援外來鍵。
支援熱備份
2.MyISAM引擎
可以配合鎖, 實現作業系統下的複製備份、 遷移。
使用表級鎖, 併發性差。
支援全文檢索(MySQL InonoDB在5.6以後也支援全文檢索) 。
主機宕機後, MyISAM表易損壞, 災難恢復性不佳。
無事務支援。
只快取索引, 資料的快取是利用作業系統緩衝區來實現的。 可能引發過多的系統呼叫且效率不佳。
資料緊湊儲存, 因此可獲得更小的索引和更快的全表掃描效能。
3.MEMORY引擎
MEMORY儲存引擎提供“記憶體”表, 也不支援事務、 外來鍵。
使用記憶體表(記憶體引擎) 可以顯著提高訪問資料的速度, 可用於快取會頻繁訪問的、 可以重構的資料、 計算結果、 統計值、 中間結果, 但也有如下這些不足之處。
使用的是表級鎖, 雖然記憶體訪問快, 但如果頻繁地讀寫, 表級鎖可能會成為瓶頸所在。
只支援固定大小的行。 VARCHAR型別的欄位會儲存為固定長度的CHAR型別, 浪費空間。
不支援TEXT、 BLOB欄位。 當有些查詢需要使用到臨時表(使用的也是MEMORY儲存引擎) 時如果表中有TEXT、 BLOB欄位, 那麼會轉化為基於磁碟的MyISAM表, 嚴重降低效能。
由於記憶體資源成本昂貴, 一般不建議設定過大的記憶體表, 如果記憶體表滿了, 就會在MySQL錯誤日誌裡發現類似“Thetable‘table_name’is full”這樣的錯誤, 可通過清除資料或調整記憶體表引數來避免報錯。
伺服器重啟資料會丟失
4.ARCHIVE引擎
ARCHIVE儲存引擎是被設計用來儲存企業中的大量流水資料的儲存引擎。 ARCHIVE引擎使用zlib無損資料壓縮, 讓資料都儲存在壓縮的存檔表中。 當資料被插入時, 它們被壓縮。
它只支援INSERT和SELECT, 支援自增鍵及其上的索引, 不支援其他索引。 它適合做日誌記錄、 使用者行為分析, 不需要UPDATE、 DELETE和索引的資料

mysql的儲存引擎有很多,我們在實際使用的過程需要按照自己的需求去選擇,選擇的時候需要考慮以下因素
是否需要事務支援。
是否為高併發, InnoDB實現了行鎖, 這方面的表現大大優於MyISAM。
索引, 不同儲存引擎的索引實現不盡相同。
是否需要外來鍵。
高效緩衝資料, InnoDB緩衝資料而MyISAM只緩衝了索引。
備份, 是否需要支援熱備份。