首先想分享一个我一贯的观点:从性能角度而言,MySQL 不会输给任何其它数据库系统。如果说它有什么不足,主要应该是在“功能”和“易管理性”方面。
(所谓“性能”,当然同时包括“处理速度”和“数据量”两个方面的考量)
Oracle 并非神物,也是人写出来的程序。作为一款商业软件,它的无可比拟之处在于(个人观点):全面的功能设计、完备的手册、强大而完善的管理工具。(至于 Oracle 强大的品牌形象而带来的在某些官僚体系中“规避决策风险”的效果,就不是技术领域的话题了)
“手册”和“管理工具”都是可以用“使用者的勤劳和智慧”代替的。而“功能”又可分为“功能型的功能”和“性能型的功能”。(有点绕,但不要理解成性功能就好了 :)
功能型的功能:比如存储过程、触发器、外键约束等等,它们使得应用开发过程中做某些事情更方便。这一点历史上 MySQL 跟进得比较慢,现在也只能说大体上都有了,谈不上多好。至于 OLAP,我觉得那已经脱离了数据库技术本身,而是一个专门的应用产品了。
性能型的功能:比如分区、集群、内部优化策略。这些方面,我觉得 MySQL 已经做得很好了。虽然分区功能起步比较晚,但似乎因为其并不复杂深奥,算是成熟了。而“优化策略”,从 MySQL 手册里看,应该算相当的深入细致了。(举个例子,有些文件系统可以支持“不关心文件的最后修改时间”,而启用这个支持可以在一定程度上提高硬盘访问性能。连这个都算上了,你还担心它有什么没考虑到的吗?)
如果你承认开源社区的强大的研发力量,如果你觉得 MySQL 的研发团队组织还算是有效的,同时如果你也认可性能问题是 MySQL 的一个主要目标诉求,那么,把 MySQL 应用到生产环境中时的性能潜力就没有什么可怀疑的了。
当然,潜力是潜力,要想发挥出来,优化工作是必需的。
曾有极端人士提到连 group by 和 order by 都要自己手工做,这个很有疑问。务虚一点说,RDBMS 就是干这个的,你要干得比它还好,不容易,除非是因为你数据本身有什么特殊性无法用关系型数据库来表达,你自己的程序逻辑利用这种特殊性达到了高效率。
很多时候我们觉得数据库性能不如人意,是因为我们没有进行适当的优化。想必很多人都有过类似的经历:经过一些看似简单的优化,使得查询性能提高一个、甚至两个数量级都是可能的。
对于优化工作最终可能达到的效果,我现在一般是这样来判断:根据数据本身的组织结构和特点,要得到我想要的结果,是不是存在一种逻辑上的可能性来达成最高的效率,如果存在这种可能性,那我基本就相信 MySQL 能做到 :)