phpmyadmin 本身不提供慢查询日志功能,仅可查看已存入 mysql.slow_log 表的日志(需 mysql 配置 log_output=table);启用必须修改 mysql 配置 slow_query_log=on、long_query_time≤2、slow_query_log_file 可写,或执行 set global 动态开启,并重启/新建连接生效。
phpmyadmin 本身不捕获、标记或展示“慢查询”,它只是执行 sql 的界面。真正能定位 wordpress 慢查询的,是 mysql 的 slow_query_log 机制 —— 你必须先让数据库记录,再用 phpmyadmin 查看(仅限日志存表时)。
确认 MySQL 是否已启用 slow_query_log
在 phpMyAdmin 的「SQL」选项卡中运行:
SHOW VARIABLES LIKE 'slow_query_log';
返回 ON 才算启用;若为 OFF,说明日志根本没开,后续所有查看都无效。同时检查:
-
long_query_time:默认是10秒,对 WordPress 完全不够用,建议设为2或更低(如0.5) -
log_output:决定日志去哪 ——FILE写文件(需 SSH 查看),TABLE写入mysql.slow_log表(才能在 phpMyAdmin 里直接查) -
slow_query_log_file:若为FILE输出,路径必须可写,且 MySQL 进程用户(如mysql)有权限
为什么不能只靠 phpMyAdmin 的“最近 SQL”列表?
phpMyAdmin 的「SQL」页只显示你手动执行过的语句,不会自动记录 WordPress 前端请求触发的查询。WordPress 的查询由 PHP 脚本发起,经过 PDO/MySQLi 执行,全程不经过 phpMyAdmin 界面。所以:
- 你在 phpMyAdmin 里看到的“执行耗时”只是单次操作延迟,不是真实页面加载中的慢查询
- 没有上下文(比如哪个插件、哪条路由、什么参数)—— 即使某条 SQL 在 phpMyAdmin 里跑得慢,也不代表它在 WordPress 中就是瓶颈
- 无法关联到 Laravel/Eloquent 或 WordPress 的
$wpdb调用链,更看不到 prepare/bind 参数展开后的实际 SQL
如何让 mysql.slow_log 表可用并从 phpMyAdmin 查看
只有 log_output = TABLE 时,你才能在 phpMyAdmin 里点开 mysql 数据库 → slow_log 表浏览。但要注意:
- MySQL 5.6+ 默认建了
mysql.slow_log表,但可能被禁用;执行SET GLOBAL log_output = 'TABLE';后需新连接才生效 -
mysql.slow_log是 CSV 引擎表,不支持索引,大数据量时ORDER BY start_time DESC LIMIT 50会越来越慢 - 日志内容不含 Laravel/Eloquent 方法名或 WordPress 钩子名,只能看到原始 SQL 和耗时,需结合应用日志交叉比对(如开启
DB_LOG_QUERIES=true) - phpMyAdmin 默认每页只显示 30 行,而慢查询可能每分钟产生几十条,建议加
WHERE start_time > NOW() - INTERVAL 5 MINUTE缩小范围
真正有效的排查组合:MySQL 日志 + WordPress 层日志
单靠 phpMyAdmin 查 mysql.slow_log 只能看到“哪条 SQL 慢”,但解决不了“为什么慢”。必须配合应用层信息:
- Laravel:设置
DB_LOG_QUERIES=true并确保DB_DEBUG=true,日志里会带上下文(文件、行号、绑定参数) - WordPress:安装
Query Monitor插件,它能在管理栏实时显示当前页面所有查询、耗时、调用堆栈、重复查询,甚至标出未使用索引的SELECT * - 不要忽略
EXPLAIN:在 phpMyAdmin 中对疑似慢 SQL 执行EXPLAIN SELECT ...,重点看type(是否ALL)、key(是否用了索引)、rows(扫描行数)
最常被忽略的一点:long_query_time 对已有连接不生效,改完必须重启 MySQL 或新建连接;而很多开发者只改了配置却没 reload/restart,导致日志始终为空。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











