2013-03-28 124 views
101

MyISAM的設計理念是您的數據庫查詢的數量遠遠超過其更新,因此它執行的速度非常快。如果您的讀寫比例(插入|更新)小於15%,則最好使用MyISAM。何時使用MyISAM和InnoDB?

InnoDB使用行級鎖定,提交,回滾和崩潰恢復功能來保護用戶數據。它支持事務和容錯

上面的區別在MyISAM和InnobDB之間是正確的嗎? 如果MYISAM和InnobDB有任何其他限制,請指導。我應該何時使用MyiSAM或Innodb?謝謝!

+0

MyISAM假設你不關心數據完整性。 – 2013-03-28 09:39:44

+3

有幾種情況。 1.如果你想使用全文搜索,那麼使用MYISAM。 2.如果你想在表中使用關係約束,那麼使用INNODB。 – Neo 2013-03-28 09:40:10

+3

爲什麼不看**右側的「相關」列?** – 2013-03-28 09:41:38

回答

190

閱讀Storage Engines

的MyISAM:

在MySQL中MyISAM存儲引擎。

  • 易於設計和創建,因此對初學者更好。不用擔心表格之間的外部關係。
  • 由於結構更簡單,服務器資源成本更低,整體上比InnoDB更快。 - 大部分不再是真的。
  • 全文索引。 - InnoDB現在有它
  • 特別適合讀密集(選擇)表。 - 大部分不再是真的。
  • 磁盤佔用空間比InnoDB少2至3倍。 - 從5.7版本開始,這可能是MyISAM唯一的真正優勢。

InnoDB的:

在MySQL中InnoDB存儲引擎。

  • 支持事務處理(支持ACID屬性)。
  • 行級鎖定。與例如MyISAM相比,擁有更細粒度的鎖定機制可爲您提供更高的併發性。
  • 外鍵約束。允許您讓數據庫確保數據庫狀態的完整性以及表之間的關係。
  • InnoDB比MyISAM更能抵抗表損壞。
  • 支持數據和索引的大型緩衝池。 MyISAM密鑰緩衝區僅用於索引。
  • MyISAM停滯不前;所有未來的增強將在InnoDB中進行。隨着8.0版的推出,這一點非常明確。

的MyISAM限制:

  • 沒有外鍵和級聯刪除/更新
  • 沒有交易的完整性(ACID合規)
  • 沒有回滾能力
  • 4284867296行限制(2^32) - 這是舊的默認。可配置的限制(對於許多版本)是2 ** 56字節。每桌

InnoDB的限制64個指數

  • 最大:

    • 沒有全文索引(低於5.6版本的MySQL)
    • 無法爲快速壓縮,只讀( 5.5.14引入ROW_FORMAT=COMPRESSED
    • 您無法修復InnoDB表

    對於短暫性的閱讀理解下面的鏈接:

    1. MySQL Engines: InnoDB vs. MyISAM – A Comparison of Pros and Cons
    2. MySQL Engines: MyISAM vs. InnoDB
    3. What are the main differences between InnoDB and MyISAM?
    4. MyISAM versus InnoDB
    5. What's the difference between MyISAM and InnoDB?
    6. MySql: MyISAM vs. Inno DB!
  • +8

    全文索引可在InnoDB的MySQL 5.6 – Argeman 2013-03-28 09:51:13

    +1

    @Argeman感謝您的糾正。 – 2013-03-28 09:56:21

    +0

    您沒有列出MyISAM的好處。 – Perception 2013-03-28 10:02:16

    13

    使用MyISAM處理非常不重要的數據,或者您確實需要這些最小的性能優勢。 MyISAM在每種情況下的讀取性能都不會更好。

    我個人從不再使用MyISAM。如果你需要更多的性能,選擇InnoDB並多投一些硬件。另一個想法是在適用的情況下查看具有更多功能的數據庫系統,如PostgreSQL。

    編輯:對於讀性能,此鏈接顯示的InnoDB往往實際上比的MyISAM慢http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/

    +3

    「使用MyISAM處理非常不重要的數據」正在誇大可靠性差異,特別是在使用現代日記文件系統時。更常見的觀點是MyISAM讀取速度更快。我無法弄清楚爲什麼Percona博客的結果是個例外。我們用兩個引擎在我們的表上做過實驗,發現MyISAM讀取速度幾乎是InnoDB的兩倍。如果可能,最好使用自己的真實數據和環境進行測試。 – orrd 2016-07-27 19:56:48

    +0

    @orrd您是對的,只有使用自己的數據進行測試才能顯示性能影響如何。在大多數只讀的情況下,我的實驗顯示幾乎沒有任何區別,當myisam經常發生寫入時會出現真正的問題,所以在迄今爲止innodb的所有使用情況下,情況好得多 – Argeman 2016-08-02 13:28:12

    +3

    現在鏈接到博客條目大約10歲。 – robsch 2017-09-04 12:26:43