当然首选 InnoDB
写在前面:如果你无法判断,就用InnoDB,默认选项总是比较安全的,尤其是你搞不清楚你究竟需要什么的时候。
1、除非你用到了无法替代的某些 InnoDB 所不具备的特性,否则应优先考虑InnoDB引擎。
举个栗子,如果对空间占用很敏感,既不在乎可扩展性和并发能力,也不在乎崩溃后的数据丢失问题,那 MyISAM 就比较合适。比如,日志存储场景,主要是 select 和 insert,几乎不涉及update,那么 MyISAM 比 InnoDB 更合适。
另如,需要地理空间索引的场景,一般首选MyISAM(注,MySQL5.7之前仅MyISAM支持,之后InnoDB也开始支持)。
2、为什么首选 InnoDB?
1)支持 事务。
2)支持 在线热备份(如果可以定期关闭服务器执行备份,可以忽略这点)。
3)MyISAM崩溃后发生损坏的概率比InnoDB要高很多,且恢复速度也慢。因此,即使无需事务支持,多数人也选后者,这是一个非常重要的因素。
附:
不要轻信“MyISAM比InnoDB快”之类的似乎充满经验性的话。
首先,这个结论并不是绝对的。比如聚簇索引场景,就可以反杀MyISAM,或者需要访问的数据都可以放入内存的应用场景。
其次,考虑一下你的数据量级,譬如几十万的数据,那就不用纠结使用哪种引擎。
最后,有可能你的查询慢只是缺少一个恰当的索引,根源并不在引擎本身,善用explain。
网友评论