更新時間:2022-03-21 10:22:45 來源:動力節(jié)點 瀏覽1932次
MySQL存儲引擎InnoDB 和 MyISAM 之間的比較
1.InnoDB 通過重放其日志從崩潰或其他意外關(guān)閉中恢復。MyISAM 必須完全掃描和修復或重建任何已更新但未完全刷新到磁盤的索引或可能的表。由于 InnoDB 方法的時間大致是固定的,而 MyISAM 時間隨著數(shù)據(jù)文件的大小而增長,因此 InnoDB 隨著數(shù)據(jù)庫大小的增長提供了更高的可用性。
2.InnoDB,將 innodb_flush_log_at_trx_commit 設(shè)置為 1,在每個事務(wù)之后刷新事務(wù)日志,大大提高了可靠性。[1] MyISAM 必須在完全日志文件系統(tǒng)之上運行,例如以 data=journal 掛載的ext4,以提供相同的抵御數(shù)據(jù)文件損壞的彈性。(日志可以放在SSD設(shè)備上以提高 MyISAM 性能,類似地,InnoDB 日志可以放在非日志文件系統(tǒng)上,例如在 SSD 上運行的ext2以實現(xiàn)類似的性能提升。在任何一種情況下都不會犧牲可靠性。 )
3.InnoDB 可以在可靠性較低但在某些情況下性能較高的模式下運行。將 innodb_flush_log_at_trx_commit 設(shè)置為 0 會切換到在將控制權(quán)返回給調(diào)用者之前不將事務(wù)提交到磁盤的模式。相反,磁盤刷新發(fā)生在計時器上。
4.InnoDB 自動將多個并發(fā)插入組合在一起,并同時將它們刷新到磁盤。MyISAM 依靠文件系統(tǒng)塊緩存來緩存對數(shù)據(jù)行和索引的讀取,而 InnoDB 在引擎本身內(nèi)部執(zhí)行此操作,將行緩存與索引緩存結(jié)合起來。
5.如果存在,InnoDB 將按主鍵順序存儲行,否則按唯一鍵順序存儲。如果選擇的密鑰對常見操作有好處,這可以顯著加快。[需要引用]如果沒有主鍵或唯一鍵,InnoDB 將使用內(nèi)部生成的唯一整數(shù)鍵,并將按大致插入順序物理存儲記錄,就像 MyISAM 所做的那樣。或者,可以使用自動遞增的主鍵字段來實現(xiàn)相同的效果。
6.InnoDB 為數(shù)據(jù)和索引提供可更新的LZW壓縮頁面存儲。MyISAM 壓縮表無法更新。
7.在完全符合ACID的模式下運行時,InnoDB 必須對每個事務(wù)至少執(zhí)行一次磁盤刷新,盡管它會結(jié)合來自多個連接的插入的刷新。對于典型的硬盤驅(qū)動器或陣列,這將施加每秒約 200 個更新事務(wù)的限制。對于需要更高事務(wù)率的應(yīng)用程序,將需要具有寫入緩存和電池備份的磁盤控制器以保持事務(wù)完整性。InnoDB 還提供了幾種降低這種影響的模式,自然會導致事務(wù)完整性保證的損失,但仍保持比 MyISAM 更高的可靠性。MyISAM 沒有這些開銷,只是因為它不支持事務(wù)。
8.MyISAM 對任何現(xiàn)有行的更新和刪除使用表級鎖定,并可選擇追加新行而不是鎖定并將它們插入空閑空間。InnoDB 使用行級鎖定。對于經(jīng)常更新許多行的大型數(shù)據(jù)庫應(yīng)用程序,行級鎖定至關(guān)重要,因為單個表級鎖定會顯著降低數(shù)據(jù)庫中的并發(fā)性。
9.InnoDB 和 MyISAM 都支持全文搜索,InnoDB 在 MySQL 5.6.4 中獲得了全文索引支持,但結(jié)果可能有很大不同。
以上就是兩種MySQL存儲引擎的區(qū)別,大家如果想了解更多相關(guān)知識,不妨來關(guān)注一下動力節(jié)點的MySQL教程,里面的課程內(nèi)容細致全面,即使沒有基礎(chǔ)也能夠看懂,希望對大家的學習能夠有所幫助哦。