特别是,如何在MyISAM和InnoDB之间进行select,既不缺less必需的function(例如,您不需要外键)。
它总是归结为尝试和衡量? 或者,有没有关于读取与写入的数量和频率以及其他措施的好的经验法则? 桌子的大小是否对典型的select有影响?
答案是你应该总是测量,如果可能的话最好用自己的数据和工作量。
由于数据访问模式在不同应用程序之间可能会有很大差异,所以很难说所有工作负载都可以确定“最佳”存储引擎。
然而,上周参加MySQLConf / Percona Performance Conf的MySQL领域有非常令人鼓舞的发展。
一些替代存储引擎:
另外,Percona,Google等也提供了补丁,对InnoDB的性能有很大的帮助。 就我个人而言,我运行一个OurDelta构build。 它对我很好,我鼓励查看OurDelta和Percona版本。
如果这只是一个简单的商店/报告系统,我使用MyISAM来实现其原始性能。
我会使用InnoDB,如果我担心多个并发访问与大量的写入,以利用行级locking。
有不同的MySQL数据库引擎有很多的基准。 在Percona MySQL性能博客上比较MyISAM,InnoDB和Falcon是一个很好的例子 ,请看这里 。
上述两个引擎(MyISAM和InnoDB)之间需要考虑的另一件事是它们的locking方法。 MyISAM执行表locking,而InnoDB执行行locking。 有各种各样的事情要考虑,不仅是彻头彻尾的performance数字。
有一些function,你会发现非常有用的,因为操作的原因,即使你的应用程序不绝对需要他们:
所以,尽pipe外键约束,您可能还是想使用InnoDB。
当然这是ServerFault,而不是Stack Overflow,所以正确的答案是:
我的主机提供商build议我们彻底摆脱MyISAM并切换到InnoDB,除非不可能。
在我们的情况下,我们有严重的数据损坏,每天开始显示几次到几次,总是需要REPAIR TABLE和相关的命令,这些命令花费了大量的时间。
一旦我们转换(或:转换)到InnoDB,问题立即消失。 我们有下跌/警告:
但是请注意:这一切都是特定于我们的环境等,所以通常不适用。