线上慢SQL优化实战:摄影大赛统计功能性能提升记录

一、 业务背景与问题描述

业务场景
某班级进行摄影大赛,需要统计每位老师的拍摄数量。统计规则为:老师所带学生的拍摄数量总和。在列表页查询老师拍摄数量时,需要聚合统计学生数以及每个学生的拍摄数量。

数据模型

  • 学生表属性:包含应拍数、已拍数、审核数等统计字段。
  • 核心关联表t_teacher(教师表)、t_student(学生表)、t_photo(照片/拍摄记录表)。

遇到的问题
最初,查询老师的应拍数、已拍数、审核数是通过多表关联进行实时聚合查询的。随着数据量增长,接口响应极慢,线上监控频繁出现慢 SQL 告警,严重影响用户体验。


二、 慢SQL排查与定位

1. 查看慢查询相关参数

首先确认数据库是否开启了慢查询日志以及当前的阈值设置:

-- 查看慢查询相关参数 SHOW VARIABLES LIKE '%slow_query%'; SHOW VARIABLES LIKE '%long_query_time%';

2. 开启慢查询日志

临时开启(重启失效,适合线上快速排查):

SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1; -- 设置慢查询阈值为1秒 SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';

永久生效(需修改 my.cnf 配置文件):

<