Mysql
選擇哪個mysql儲存引擎?
我對應該選擇哪個 mysql 引擎感到困惑(讓我們談談最常用的:MyISAM 和 InnoDB)。
理論說:
- 兩者都可以使用 BTree 索引,但 MyISAM 也可以使用 FULLTEXT 索引。
- InnoDB 在數據完整性方面更加嚴格,而 MyISAM 是鬆散的。
- InnoDB 有事務,而 MyISAM 沒有。
- InnoDB 有外鍵和關係約束,而 MyISAM 沒有。
- MyISAM 讀起來更快,但寫起來更慢(我不確定這個)。
當我創建一個表時,如果我想保持完整性並且我想通過“文本”加快查詢進行搜尋,我是否應該總是犧牲一些東西?
如果需要,您如何決定使用哪個引擎
- 正直 ?
- 速度 ?
- 約束?
- 按文本搜尋?
- 交易?
兩者都適用於 b-tree 索引,但 MyISAM 也可以使用 FULLTEXT 索引。
MySQL 5.6 也應該支持 FULLTEXT 索引。當它去 GA 時尋找它。
InnoDB 對數據完整性更嚴格,而 MyISAM 則比較鬆散
InnoDB 有事務,而 MyISAM 沒有。
InnoDB 有外鍵和關係約束,而 MyISAM 沒有。
鑑於 InnoDB 通過MVCC支持事務隔離這一事實,這是正確的。這在一定程度上使 InnoDB 完全符合ACID。
MyISAM 讀起來更快但寫起來更慢(我不確定這個)
這完全取決於 MyISAM 表的行格式(固定或動態)。慢是相對的。畢竟,針對 MyISAM 的每個 DML 語句每次都會執行全表鎖定。
給定足夠大的記憶體,InnoDB 可以更快地讀取和寫入,因為 COMMIT 可以延遲。這使得已經記憶體在 InnoDB 緩衝池中的數據可用於從記憶體中讀取。
InnoDB 記憶體 Data 和 Indexes 而 MyISAM 只記憶體 Indexes。因此,始終需要從 MyISAM 讀取數據的磁碟。