Mysql

InnoDB 和 MyISAM 哪個更快?

  • June 11, 2015

MyISAM 怎麼能比 InnoDB “快” 如果

  • MyISAM 需要對數據進行磁碟讀取嗎?
  • InnoDB 將緩衝池用於索引和數據,而 MyISAM 僅用於索引?

在這種獨特的情況下,MyISAM 可以比 InnoDB 更快的唯一方法

MyISAM

讀取時,可以從 .MYI 文件中讀取一次 MyISAM 表的索引並載入到 MyISAM 密鑰記憶體中(大小由key_buffer_size決定)。如何讓 MyISAM 表的 .MYD 更快地閱讀?有了這個:

ALTER TABLE mytable ROW_FORMAT=Fixed;

我在過去的文章中寫過這個

InnoDB

好的,InnoDB 呢?InnoDB 是否為查詢執行任何磁碟 I/O?令人驚訝的是,確實如此!您可能認為我這麼說很瘋狂,但這是絕對正確的,即使對於 SELECT 查詢也是如此。此時,您可能想知道“InnoDB 到底是如何為查詢進行磁碟 I/O 的?”

這一切都可以追溯到 InnoDB 作為ACID投訴事務儲存引擎。為了使 InnoDB 成為事務性的,它必須支持Iin ACID,即 Isolation。維護事務隔離的技術是通過MVCC,Multiversion Concurrency Control完成的。簡單來說,InnoDB 在事務嘗試更改數據之前記錄數據的樣子。這是在哪裡記錄的?在系統表空間文件中,更好地稱為 ibdata1。這需要磁碟 I/O

比較

由於 InnoDB 和 MyISAM 都進行磁碟 I/O,哪些隨機因素決定了誰更快?

  • 列的大小
  • 列格式
  • 字元集
  • 數值範圍(需要足夠大的 INT)
  • 跨塊拆分的行(行連結)
  • DELETEs由和引起的數據碎片UPDATEs
  • 主鍵大小(InnoDB 有一個聚集索引,需要兩個鍵查找)
  • 索引條目的大小
  • 名單還在繼續……

因此,在重讀環境中,如果有足夠的數據寫入 ibdata1 中包含的撤消日誌以支持事務行為,則具有固定行格式的 MyISAM 表的性能可能優於從 InnoDB 緩衝池中讀取的 InnoDB強加於 InnoDB 數據。

結論

仔細規劃您的數據類型、查詢和儲存引擎。一旦數據增長,移動數據可能會變得非常困難。只問臉書…

引用自:https://dba.stackexchange.com/questions/17431