)
# MySQL慢查询日志开启与SQL优化实战宝塔环境网站访问卡顿、接口响应超时很多时候根源在数据库慢SQL。宝塔环境下MySQL慢查询是日常运维高频排查项下面整理一套实操流程。## 一、开启慢查询日志进入宝塔数据库配置找到my.cnf在[mysqld]段添加配置 ini slow_query_log1slow_query_log_file/www/server/mysql/log/slow.log long_query_time2log_queries_not_using_indexes0参数说明slow_query_log1开启慢查询long_query_time2执行超过 2 秒的 SQL 记录日志log_queries_not_using_indexes关闭则不记录没有走索引的 SQL避免日志爆炸修改完成后重启 MySQL 服务生效。二、查看实时慢 SQL查看当前正在执行的 SQLshow processlist;如果看到大量 Sleep 或者 Query 状态长时间停留就是数据库阻塞了。分析慢日志自带工具mysqldumpslow-st /www/server/mysql/log/slow.log-s t 代表按照执行时间排序优先看耗时最高的语句。三、用 EXPLAIN 分析 SQL 执行计划拿到慢 SQL 之后前面加上 EXPLAIN 查看执行计划EXPLAIN SELECT * FROMtestWHEREid1;重点看 type 字段ref、range 属于正常ALL 代表全表扫描是最需要优化的一般是缺少索引。key 字段显示当前 SQL 实际命中的索引。四、索引失效常见坑where 条件字段做函数运算隐式类型转换字符串和数字对比使用 or 连接没有同时加索引模糊查询 % 放在前面无法走索引。五、简单优化思路给查询条件字段建立合适索引不要 select *只查询需要的字段大表分页避免 limit 超大偏移频繁查询的数据放入 Redis 缓存减少数据库压力。小结数据库慢排查顺序show processlist 看实时阻塞开启慢查询日志捕获慢 SQLexplain 分析执行计划补索引、改写 SQL、增加缓存参考资料文档记录lxmrj.com