MySQL 是一個常見的開源免費多引擎的關系型數據庫,各種適配器齊全,我們很容易就可以在項目中使用它。常見存儲引擎有 InnoDB,MyISAM,MRG_MYISAM,BLACKHOLE ,MEMORY,PERFORMANCE_SCHEMA,ARCHIVE,CSV,,FEDERATED 等。
在 MySQL 5.5 版本之前中默認是 MyISAM 引擎,但到了 5.5+ 版本就默認使用 InnoDB 引擎,支持的引擎如下:
MySQL 5.5.62:
MySQL 5.6.24:
MySQL 5.7.27:
MySQL 8.0.17:
首先,就是要對這些存儲引擎有一定的了解,才能在實際使用過程中針對性的選擇最佳的引擎方案,最常用的引擎就是 InnoDB 和 MyISAM 兩種,我們可以從是否支持行級鎖,是否支持事務、是否支持外鍵,是否支持 MVCC,是否支持安全恢復、性能等角度去對比并結合項目的實際需求,選擇最合適的存儲方案。
InnoDB 支持原子性、一致性、隔離性、持久性的事務處理特性、同時支持外鍵,支持行級鎖(row-level locking)和表級鎖(table-level locking),默認是行級鎖。而 MyISAM 只支持表級鎖,不支持事務和外鍵。
MyISAM 查詢性能比較好,提供全文索引、壓縮、空間函數等,但是InnoDB 提供事務支持事務,外部鍵等高級數據庫功能。 具有事務(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)的事務安全(transaction-safe (ACID compliant))型表。
僅 InnoDB 支持 MVCC。應對高并發事務, MVCC 比單純的加鎖更高效; MVCC 只在 READ COMMITIED 和 REPERATABLE READ 兩個隔離級別下工作,MVCC 可以使用 樂觀(optimistic)鎖和悲觀(pessimistic)鎖來實現,各數據庫中MVCC實現并不統一。
在了解 MySQL 各類存儲引擎的特點后,我相信你在選擇何種方案應該就很好決定了。