
网站运行变慢、数据库卡顿、页面加载延迟、间歇性 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 性能优化


