Mysql
InnoDB 和 MyISAM 哪個更快?
MyISAM 怎麼能比 InnoDB “快” 如果
- MyISAM 需要對數據進行磁碟讀取嗎?
- InnoDB 將緩衝池用於索引和數據,而 MyISAM 僅用於索引?
在這種獨特的情況下,MyISAM 可以比 InnoDB 更快的唯一方法
MyISAM
讀取時,可以從 .MYI 文件中讀取一次 MyISAM 表的索引並載入到 MyISAM 密鑰記憶體中(大小由key_buffer_size決定)。如何讓 MyISAM 表的 .MYD 更快地閱讀?有了這個:
ALTER TABLE mytable ROW_FORMAT=Fixed;
我在過去的文章中寫過這個
- 最好的 MyISAM 和 InnoDB(請先閱讀這個)
- 在固定大小的欄位上使用 CHAR 與 VARCHAR 對性能有何影響?(權衡#2)
- 為高端和繁忙的伺服器優化了 my.cnf(在標題下複製)
- 哪個 DBMS 適合超快速讀取和簡單的資料結構?(第 3 段)
InnoDB
好的,InnoDB 呢?InnoDB 是否為查詢執行任何磁碟 I/O?令人驚訝的是,確實如此!您可能認為我這麼說很瘋狂,但這是絕對正確的,即使對於 SELECT 查詢也是如此。此時,您可能想知道“InnoDB 到底是如何為查詢進行磁碟 I/O 的?”
這一切都可以追溯到 InnoDB 作為ACID投訴事務儲存引擎。為了使 InnoDB 成為事務性的,它必須支持
I
inACID
,即 Isolation。維護事務隔離的技術是通過MVCC,Multiversion Concurrency Control完成的。簡單來說,InnoDB 在事務嘗試更改數據之前記錄數據的樣子。這是在哪裡記錄的?在系統表空間文件中,更好地稱為 ibdata1。這需要磁碟 I/O。比較
由於 InnoDB 和 MyISAM 都進行磁碟 I/O,哪些隨機因素決定了誰更快?
- 列的大小
- 列格式
- 字元集
- 數值範圍(需要足夠大的 INT)
- 跨塊拆分的行(行連結)
DELETEs
由和引起的數據碎片UPDATEs
- 主鍵大小(InnoDB 有一個聚集索引,需要兩個鍵查找)
- 索引條目的大小
- 名單還在繼續……
因此,在重讀環境中,如果有足夠的數據寫入 ibdata1 中包含的撤消日誌以支持事務行為,則具有固定行格式的 MyISAM 表的性能可能優於從 InnoDB 緩衝池中讀取的 InnoDB強加於 InnoDB 數據。
結論
仔細規劃您的數據類型、查詢和儲存引擎。一旦數據增長,移動數據可能會變得非常困難。只問臉書…