我对应该选择哪个 mysql 引擎感到困惑(让我们谈谈最常用的:MyISAM 和 InnoDB)。
理论说:
- 两者都可以使用 BTree 索引,但 MyISAM 也可以使用 FULLTEXT 索引。
- InnoDB 在数据完整性方面更加严格,而 MyISAM 是松散的。
- InnoDB 有事务,而 MyISAM 没有。
- InnoDB 有外键和关系约束,而 MyISAM 没有。
- MyISAM 读起来更快,但写起来更慢(我不确定这个)。
当我创建一个表时,如果我想保持完整性并且我想通过“文本”加快查询进行搜索,我是否应该总是牺牲一些东西?
如果需要,您如何决定使用哪个引擎
- 正直 ?
- 速度 ?
- 约束?
- 按文本搜索?
- 交易?
MySQL 5.6 也应该支持 FULLTEXT 索引。当它去 GA 时寻找它。
鉴于 InnoDB 通过MVCC支持事务隔离这一事实,这是正确的。这在一定程度上使 InnoDB 完全符合ACID。
这完全取决于 MyISAM 表的行格式(固定或动态)。慢是相对的。毕竟,针对 MyISAM 的每个 DML 语句每次都会执行全表锁定。
给定足够大的缓存,InnoDB 可以更快地读取和写入,因为 COMMIT 可以延迟。这使得已经缓存在 InnoDB 缓冲池中的数据可用于从内存中读取。
InnoDB 缓存 Data 和 Indexes 而 MyISAM 只缓存 Indexes。因此,始终需要从 MyISAM 读取数据的磁盘。