SQL优化步骤
1. 使用pt-query-digest分析慢日志,拿到调用频率高并且执行时间长的语句。
2. 获取语句相关表的信息,以及explain等相关信息,一般收集如下信息
- l 执行计划:explain query;
- l 详细执行计划:explain extended query;show warnings;
- l 相关表信息:show create table test1;
- l 语句执行开销:show profile for query num;
- l 数据量:select count(0) from table;
- l 相关表的索引信息:show index for table;
- l my.cnf查询相关参数如各类buffer等
3. 进行初步分析,诊断SQL语句,查看在SQL层面能否带来提升,一般应对手段如下
- l 条件上拉、下推
- l 子查询合并、展开
- l 添加索引、优化索引
- l distinct、group by、orderby尽量利用索引减少文件排序
- l 子查询尽量转换为join,最好消除
- l 尽量减少聚合函数,将复杂查询转换为多表链接
- l 尽量优化等价谓词,尽可能利用索引
- l join的一些优化,连接消除、去除中间表等
4. SQL无优化空间考虑从业务逻辑层面入手。常用手段如下
- l 增加冗余字段
- l 拆分表(水平/竖直)
- l 使用分布式
- l 将大事务拆分为多个小事务
- l 精简数据库的设计,减少使用存储过程、触发器等
5. 对硬件进行优化,升级服务器硬件。
3、4步骤可与调整系统参数相结合,具体使用方法视具体业务而定。
优化投入收益如下
业务优化投入大,收益大
语句优化投入小,收益大
硬件优化投入大,收益小
优化优先级为语句优化>业务优化>硬件优化