前一段时间做了某产品实时统计的报表,这周在对报表性能进行优化。
其中逐步积累了一些优化经验,总结一下记录下来,欢迎大家一起探讨。
本文仅限于探讨单个数据库的查询sql及统计报表调优,不涉及分布式数据库架构或垂直、水平扩展等知识。
(本文中的统计数据库为Mysql)
一、SQL调优:
1、提升统计查询性能,首当其冲当然还是对查询SQL进行优化,说到SQL调优,不得不先说一下Mysql里SQL的执行顺序。网上查了一些资料,引用如下:
from -> (on -> join ->) where -> group by -> 聚集函数计算 -> having -> 计算所有表达式 -> order by -> limit
2、SQL调优的基本思想:
Sql所需处理的资源总量/Sql单位时间所能处理的资源量=Sql执行时间
所以为减少Sql执行时间:
(1)可以增大Sql单位时间所能处理的资源量。
(2)可以减少Sql所需处理的资源总量。
要实现方法(1)一般需要提升硬件处理能力或对RDBMS进行优化。因此我们这里主要讨论方法(2)。即减少Sql所需处理的资源总量,就是减少执行sql所处理的行数。
3、如何减少Sql执行时所处理的行数?
参考了这个人下面的几篇blog,在实际工作中感觉确实比较有帮助,特此记录一下。
二、关于索引
经过了以上的SQL调优,查询的速度应该已经提升了不少,但是随着库表中的数据日渐增多,简单的SQL调优可能已经无法满足性能的需求,此时可以通过对表添加索引来加快查