簡體   English   中英

MyISAM 什么時候比 InnoDB 更好?

[英]When MyISAM is better than InnoDB?

有時我在一些采訪中被問到:InnoDB 對 MyISAM 有什么好處,什么時候 MyISAM 比 InnoDB 更好? 問題的第一部分很清楚:InnoDB 是事務兼容的,行級阻塞而不是表級阻塞,外鍵支持和其他一些,這些點立即浮現在腦海中。

但是什么時候 MyISAM 真的比 InnoDB 更好呢?

當您不需要那些高級功能並且存儲速度比其他問題更重要時,MyISAM 比 InnoDB 更好。 MyISAM 還允許在數據庫引擎本身內部執行全文搜索,而不需要查詢結果,然后將它們作為數組或應用程序中的任何內容進行搜索。

如果您需要以高度保真度存儲具有復雜交互和關系的數據,InnoDB 是一個合理的選擇。 如果您需要在短時間內保存或加載大量記錄,MyISAM 是一個合理的選擇。

我不建議將 MyISAM 用於重要的數據。 它非常適合記錄或評論字段或任何您不特別關心的記錄是否消失在扭曲的地獄中。 當您關心您的數據、不需要快速搜索並且必須使用 MySQL 時,InnoDB 非常適合。

還值得一提的是,InnoDB 支持行級鎖定,而 MyISAM 只支持表級鎖定——也就是說,對於許多常見的情況,InnoDB 可以因為並行執行更多的查詢而顯着加快。

底線:除非您絕對必須使用 MyISAM,否則請使用 InnoDB。 或者,針對 PostgreSQL 進行開發並充分利用兩者。

MyISAM 不支持事務(以及提到的其他內容),因此它可以更快地工作。 MyISAM 是一種在您不需要這些功能的情況下實現更高性能的方法。

如前所述,MyISAM 支持全文,但也支持 MERGE 表類型。 當您有一張大桌子並希望定期“交換”/歸檔其中的一部分時,這很方便。 考慮您想要保留最后一個季度和/或年度的日志記錄或報告數據。 當您主要是插入而很少更新或刪除時,MyISAM 可以更好地處理這樣的大量數據。

一旦你無法適應 memory 中的索引,InnoDB 的性能就會迅速下降。 如果您的主鍵不是數字(即自動遞增),那么您可能需要重新考慮使用 InnoDB。 為 InnoDB 表上的每個索引復制主鍵。 因此,如果您有一個大的主鍵和一些其他索引,您的 InnoDB 表將很快變得非常大。

MySQL 僅針對 MyISAM 實現了一些功能(例如原生全文索引)。

也就是說,對於大多數生產應用程序來說,InnoDB 通常仍然更好。

另外:僅 myISAM 表支持 mySQL 中的全文搜索。

與 InnoDB 相比,MyISAM 的結構非常簡單。 沒有行版本控制,每個表有一個文件,行按順序存儲。 但是,雖然它支持並發插入(SELECT 和 1 個 INSERT 可以一起運行),但它還具有表級鎖(如果同一張表上有 2 個 INSERT,則 1 個必須等待)。 此外,由於數據文件的結構,UPDATE 和 DELETE 很慢。

MyISAM 不支持事務或外鍵。

一般來說,如果您研究一般趨勢(因此您不關心各個行的正確性)並且數據在夜間更新或從不更新,MyISAM應該會更好。 此外,它允許通過文件系統將單個表從一台服務器移動到另一台服務器。

InnoDB 很好地支持並發和事務。 對全文有不錯的支持,對外鍵也有幾乎不錯的支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM