正在做一个软件设计, 希望有个功能, 然而, 对于加上该功能后对系统性能造成的影响很是担忧. 可以说是, 一方面想要有这个功能, 另一方面又对性能问题是否能够解决很怀疑, 正处于犹豫不决状态.
于是决定进行实验. 首先对表结构和索引进行了优化, 初步结果还不错, 性能基本进入可接受的范围. 然而, 这是面向一个百万千万用户的系统, 所以, 刚好处于边缘状态是远不够的. 于是, 就借助于Sql Server Management Studio 的execution plan 显示功能, 对查询进行了优化. 为此, 在表中自动的插入了一百万条记录. 在接下来的一两个小时内, 写出了同一个sql查询功能的4个不同的版本, 居然把性能提高了一百多倍. 心里十分高兴.
请看下图中的数据, 注意方框内的数据, 可以看到, 同样的查询, 优化程度不同, 有 190倍的执行速度差异.
下图是数据库engine的执行计划图:
大家知道, 数据库在需要承担大量用户的网站软件中, 对于性能而言, 处于关键地位. 为了提高数据库的性能, 人们作出了多方面的努力, 包括scale up, scale out. 然而 scale up 通常是很废钱的, 比如, 一台16个cpu的服务器, 比一个普通的4核心机器要贵出二十倍以上, 而且scale up的上限也很低, 常常不能满足要求. 而scale out, 通常, 要从软件的架构设计到编程做出一整套的安排, 在开发上会增加成本. 如果能够根据对数据库engine的内部算法的深入知识, 对sql 查询做优化, 达到如此的性能提高, 实在是极其高效的.