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