大部分情况下,InnoDB都是正确的选择。除非要用到InnoDB不具备的特性,且没有其他方法代替,否则应该优先选择InnoDB引擎。
不建议混合使用多种存储引擎。
如果需要用不同引擎,考虑因素:
1.事务
如过需要事务支持,那么选择InnoDB(或XtraDB)。如果不需要事务,并且主要是SELECT和INSERT操作,那么MyISAM可以选择。一般日志性应用比较符合这一特性。
2.备份
如果需要在线热备份,那么选择InnoDB是基本要求。
3.崩溃恢复
MyISAM崩溃后发生损坏的概率比InnoDB高很多,且恢复速度慢。
4.特有特性
常见场景选用合适的存储引擎:
- 日志性应用
这一类应用插入速度要求高,数据库不能成为瓶颈。MyISAM或者Archive存储引擎对这种应用比较合适,因为开销低且插入速度快。
如果需要对记录日志做分析报表,生成报表的SQL可能导致插入效率明显降低。
一种解决方案是利用MyISAM内置的复制方案将数据复制一份到备库,然后在备库上执行耗时操作。
另一种方法是在日志记录表中包含年月信息,这样可以在已经没有插入操作的历史表上做频繁操作而不影响正在插入表的操作。
只读或大部分情况只读的表
对于读多写少场景,如果不介意崩溃恢复问题,MyISAM引擎合适。订单处理
涉及订单处理,那么支持事务是必要选项。还要考虑存储引擎对外键的支持情况。InnoDB是订单处理类应用的最佳选择。电子公告牌和主题讨论论坛
CD-ROM应用
如果要发布基于CD-ROm或DVD-ROM且基于MySQL的应用,可以考虑MyISAM表或MyISAM压缩表。大数据量
大数据量下不建议使用MyISAM,如果数据量增长到10TB以上级别,可能需要建立数据仓库。Infobright是MySQL数据仓库比较好的解决方案,有的可能适合TokuDB。