对于如何选择存储引擎,可以简答的归纳为一句话:“除非需要用到某些INNODB 不具备的特性,并且没有其他办法可以替代,否则都应该选择INNODB 引擎”。例如:如果要用到全文索引,建议优先考虑INNODB加上Sphinx的组合,而不是使用支持全文索引的myisam。当然,如果不需要用到InnoDB的特性,同时其他引擎的特性能够更好的满足需求,也可以考虑一下其他存储引擎。举个例子,如果不在乎可扩展能力和并发能力,也不在乎崩溃后的数据丢失问题,却对InnoDB的空间占用比较敏感,这种场合下选择MyISAM就比较合适。
除非万不得已,否则建议不要混合使用多种存储引擎,否则可能带来一系列负责的问题,以及一些潜在的bug和边界问题。存储引擎层和服务器层的交互已经比较复杂,更不用说混合多个存储引擎了。至少,混合存储引擎对一致性备份和服务器参数配置都带来了一定的困难。
比较点 | MyISAM | innoDb | BDB | Memory | Archive |
---|---|---|---|---|---|
适合场景 | 操作和插入 | 安全 | - | 访问/变化频繁,没必要入库 | 访问/变化频繁,没必要入库 |
适用用于 | 帖子/信息/新闻/商品 | 账户/余额/订单/积分 | - | 用户在线状态 | 用户在线状态 |
插入速度 | 高 | 低 | 高 | 高 | 非常高 |
事务 | - | 支持 | 支持 | - | - |
全文索引 | 支持 | - | - | - | - |
锁机制 | 表锁 | 行锁 | 页锁 | 表锁 | 行锁 |
以上重点 | --------------------------- | ------------------------- | ------ | ----------------------------------- | ---------------------------------- |
崩溃恢复 | 差 | 优 | - | - | - |
热线备份 | 最优 | ||||
存储限制 | 无 | 64TB | 无 | 有 | 无 |
B数索引 | 支持 | 支持 | 支持 | 支持 | - |
哈希索引 | - | 支持 | - | 支持 | - |
集群索引 | - | 支持 | - | - | - |
数据缓存 | - | 支持 | - | 支持 | - |
索引缓存 | 支持 | 支持 | - | 支持 | - |
数据压缩 | 支持 | - | - | - | 支持 |
空间使用 | 低 | 高 | 低 | N/A | 非常低 |
内存使用 | 低 | 高 | 低 | 中 | 低 |
网友评论