MySQL數據庫引擎的比較
外觀
這是MySQL數據庫管理系統(DBMS)的可用數據庫引擎之間的比較。 數據庫引擎 (或「存儲引擎」)是DBMS用於從數據庫增刪查改(CRUD)數據的底層軟件組件。
數據庫引擎 | 開發商 | 許可 | 支持事務 | 積極發展 |
---|---|---|---|---|
Archive | 甲骨文公司 | GPL | 否 | 是 |
Aria | MariaDB | GPL | 否 | 是 |
Berkeley DB | 甲骨文公司 | APGLv3 | ? | 否 |
BlitzDB | ? | GPL | 否 | 是 |
CONNECT | MariaDB | GPL | ? | 是 |
CSV | 甲骨文公司 | GPL | 否 | 是 |
DeepSQL | Deep Information Sciences | Custom Proprietary | 是 | 是 |
Falcon | 甲骨文公司 | GPL | 是 | 否 |
InfiniDB | Calpont | GPL | 是 | 是 |
InnoDB | 甲骨文公司 | GPL | 是 | 是 |
MyISAM | 甲骨文公司 | GPL | 否 | 否 |
NDB | 甲骨文公司 | GPLv2 | 是 | 是 |
TokuDB | TokuTek | Modified GPL | 是 | 是 |
WiredTiger | WiredTiger | GPL | 是 | 是 |
XtraDB | Percona | GPL | 是 | 是 |
Federated | 甲骨文公司 | GPL | ? | 否 |
FederatedX | MariaDB | GPL | ? | 是 |
CassandraSE | MariaDB | GPL | 否 | 否 |
sequence | MariaDB | GPL | 是 | 是 |
mroonga | MariaDB | GPL | ? | 是 |
SphinxSE | Sphinx Technologies | GPL | 否 | 是 |
MyRocks | GPLv2 | 是 | 是 | |
MyMax | CEICOM Solutions | Custom Proprietary | 是 | 是 |
InnoDB和MyISAM之間的比較
[編輯]- InnoDB通過重放其日誌從崩潰或其他意外關閉中恢復。 MyISAM必須完全掃描並修復或重建任何已更新但未完全刷新到磁盤的索引或可能的表。 由於InnoDB方法大約是固定時間,而MyISAM時間隨着數據文件的大小而增長,因此隨着數據庫大小的增長,InnoDB提供了更高的可用性。
- 將innodb_flush_log_at_trx_commit設置為1的InnoDB在每次事務後刷新事務日誌,大大提高了可靠性。[1]MyISAM必須在完全記錄的文件系統上運行,例如使用data = journal安裝的ext4,以提供與數據文件損壞相同的彈性。 (可以將日誌放在SSD設備上以提高MyISAM性能,類似地,InnoDB日誌可以放在非日誌文件系統上,例如在SSD上運行的ext2,以獲得類似的性能提升。在任何一種情況下都不會犧牲可靠性。)
- InnoDB可以在可靠性較低但在某些情況下具有更高性能的模式下運行。 將innodb_flush_log_at_trx_commit設置為0將切換到在將控制權返回給調用方之前未將事務提交到磁盤的模式。 相反,磁盤刷新發生在計時器上。[1]
- InnoDB會自動將多個並發插入組合在一起並同時將它們刷新到磁盤。[2]MyISAM依賴於文件系統塊緩存來緩存對數據行和索引的讀取,而InnoDB在引擎本身內執行此操作,將行緩存與索引緩存相結合。[3]
- 如果存在,InnoDB將以主鍵順序存儲行,否則將存儲第一個唯一鍵順序。 如果選擇密鑰以便於常見操作,這可以明顯更快。如果沒有主鍵或唯一密鑰,InnoDB將使用內部生成的唯一整數密鑰,並將以粗略的插入順序物理存儲記錄,如 MyISAM做到了。 或者,可以使用自動增量主鍵字段來實現相同的效果。
- InnoDB為數據和索引提供可更新的LZW壓縮頁面存儲。 MyISAM壓縮表無法更新。[4]
- 在完全符合ACID標準的模式下運行時,InnoDB必須每次事務至少對磁盤執行一次刷新,儘管它會將刷新與多個連接的插入結合起來。 對於典型的硬盤驅動器或陣列,這將限制每秒約200次更新事務。 對於需要更高事務率的應用程序,將需要具有寫入緩存和備用電池的磁盤控制器,以保持事務完整性。 InnoDB還提供了幾種減少這種影響的模式,自然會導致事務完整性保證的丟失,儘管仍然保留了比MyISAM更高的可靠性。 MyISAM沒有這種開銷,只是因為它不支持事務。
- MyISAM使用表級鎖定對任何現有行進行更新和刪除,並可選擇附加新行而不是鎖定並將其插入可用空間。 InnoDB使用行級鎖定。 對於經常更新許多行的大型數據庫應用程序,行級鎖定至關重要,因為單個表級鎖定會顯着降低數據庫中的並發性。
- InnoDB和MyISAM都支持全文搜索,InnoDB在MySQL 5.6.4中獲得全文索引支持[5],但結果可能會有顯着差異[6]。
參見
[編輯]- ^ 1.0 1.1 MySQL 5.5 Reference Manual - InnoDB Startup Options and System Variables. [2018-12-17]. (原始內容存檔於2019-08-08).
- ^ MySQL 5.5 Reference Manual - InnoDB Group Commit. [2018-12-17]. (原始內容存檔於2011-11-04).
- ^ MySQL 5.5 Reference Manual - The InnoDB Storage Engine. [28 May 2015]. (原始內容存檔於2020-01-01).
- ^ MySQL 5.5 Reference Manual - myisampack — Generate Compressed, Read-Only MyISAM Tables. [2018-12-17]. (原始內容存檔於2019-11-29).
- ^ Changes in MySQL 5.6.4 (2011-12-20, Milestone 7). Oracle. December 12, 2011 [2018-12-17]. (原始內容存檔於2020-09-21).
- ^ InnoDB Full-text Search in MySQL 5.6: Part 2, The Queries!. MySQL Performance Blog. March 4, 2013 [2018-12-17]. (原始內容存檔於2014-07-15).