MySQL 慢查询日志开启与分析,轻松优化慢 SQL

iT日记 建站运维 32

MySQL 慢查询日志开启与分析,轻松优化慢 SQL-第1张图片-iT日记

网站运行变慢、数据库卡顿、页面加载延迟、间歇性 502,大部分根源都来自劣质 SQL 语句。大量未优化的查询、无索引语句、全表扫描,会持续拉高 MySQL 负载,拖垮整台服务器性能。

本文基于宝塔面板环境,手把手教你开启 MySQL 慢查询日志、分析慢语句、定位问题并完成优化,适合 ZBlog、MetInfo 等各类 CMS 站点,新手可直接照搬操作。

一、什么是 MySQL 慢查询

慢查询,指执行时间超过指定阈值的 SQL 语句。

默认阈值为 10 秒,只要 SQL 执行耗时过长,就会被记录到日志中。

常见危害:

数据库 CPU 占用飙升

网站打开缓慢、加载卡顿

并发访问下直接卡死、超时

搜索引擎抓取异常,影响收录与权重

二、宝塔面板一键开启慢查询日志

1. 图形化操作(新手首选)

宝塔后台 → 软件商店 → MySQL → 设置

找到「慢查询日志」

开启开关,设置慢查询时间:2 秒

保存配置,重启 MySQL 生效

2. 手动配置 my.cnf 文件

如需自定义参数,编辑 MySQL 配置文件:

# 开启慢查询
slow_query_log = 1
# 慢查询日志路径
slow_query_log_file = /www/server/mysql/slow.log
# 超时阈值 2秒
long_query_time = 2
# 记录未使用索引的SQL
log_queries_not_using_indexes = 1

保存后重启数据库:

service mysqld restart

三、如何查看与分析慢查询日志

1. 直接查看原始日志

# 实时监控慢SQL
tail -f /www/server/mysql/slow.log

2. mysqldumpslow 工具快速分析

MySQL 自带分析工具,快速统计高频慢语句:

# 查看访问次数最多的慢查询
mysqldumpslow -s c /www/server/mysql/slow.log

# 查看耗时最长的慢查询
mysqldumpslow -s t /www/server/mysql/slow.log

常用参数:

-s c:按访问次数排序

-s t:按执行时间排序

-l:锁定时间纳入统计

四、网站常见慢 SQL 类型

1、全表扫描

没有建立索引,查询时遍历整张数据表,数据越多越卡。

2、模糊查询滥用

like %关键词% 前置通配符,直接失效索引。

3、多表无关联 JOIN

多表联查不写关联条件,产生笛卡尔积,数据量爆炸。

4、页面一次性查询大量数据

不分页、一次性读取上万条数据,占用大量 IO。

5、后台统计、全站数据汇总

CMS 后台统计、访客统计、数据汇总脚本,极易产生慢查询。

五、慢 SQL 通用优化方案

1. 给高频查询字段建立索引

核心优化手段,几乎能解决 80% 慢查询问题。

常用索引场景:

文章 ID、用户 ID、栏目 ID

时间字段、状态字段

经常作为 where 条件的字段

注意:索引不宜过多,写入频繁的表索引过多会拖慢新增、修改速度。

2. 优化模糊查询写法

❌ 错误写法(不走索引)

select * from blog where title like %教程%;

合理写法

select * from blog where title like 教程%;

3. 杜绝 select * 全字段查询

只查询需要的字段,减少内存与 IO 消耗:

错误

select * from article;

正确

select id,title,addtime from article;

4. 大数据列表强制分页

前台、后台列表必须限制条数:

limit 20

避免一次性加载海量数据。

5. 优化 JOIN 联表查询

关联字段务必建立索引,严格书写关联条件,避免无效联查。

六、宝塔数据库日常优化小设置

开启 MySQL 缓存,减轻重复查询压力

定期碎片整理,优化数据表

无用数据表、冗余数据定期清理

定时备份数据库,防止优化出错

七、优化后效果

数据库 CPU 占用大幅下降

页面打开速度明显加快

服务器负载降低,运行更稳定

爬虫抓取顺畅,网站权重稳步提升

标签: MySQL 慢查询 慢 SQL 优化 数据库卡顿解决 宝塔开启慢查询 MySQL 性能优化

上一篇PHP 8.3 新特性与性能优化,老项目升级注意事项

下一篇当前分类已是最新一篇