- 线上SQL调优经验。调优的惯用思路。
一般的调优就是为了用上索引,有一些排序需要的内存过大,得用到磁盘,有些关联的表太多,有些buffer配置过小等等,都是调优的方面,还有业务调优的,就是把这个需求砍了,不是产品要啥就做啥,需要评估实现难度的。
这是最常用、每一个技术人员都应该掌握基本的SQL调优手段(包括方法、工具、辅助系统等)。这里以MySQL为例,最常见的方式是,由自带的慢查询日志或者开源的慢查询系统定位到具体的出问题的SQL,然后使用explain、profile等工具来逐步调优,最后经过测试达到效果后上线。这方面的细节,可以参考MySQL索引原理及慢查询优化。
- 分页优化细节
(1)使用索引覆盖+子查询优化
SELECT a.empno,a.empname,a.job,a.sal,b.depno,b.depname
from emp a left join dep b on a.depno = b.depno
where a.id >= (select id from emp order by id limit 4800000,1)
order by a.id limit 25;
受影响的行: 0
时间: 1.541s
(2)起始位置重定义(将上次最后一条数据id返回)
/*记住了上次的分页的最后一条数据的id是4800000,这边就直接跳过4800000,从4800001开始扫描表*/
SELECT a.id,a.empno,a.empname,a.job,a.sal,b.depno,b.depname
from emp a left join dep b on a.depno = b.depno
where a.id > 4800000
order by a.id limit 25;
- 监控sql执行情况,发邮件、短信报警,便于快速识别慢查询sql
- 打开数据库慢查询日志功能
- 简化业务逻辑
- 代码重构、优化
- 异步处理
- sql优化
- 索引优化