如何分析Laravel慢查询日志并在phpMyAdmin中进行性能优化_添加索引解决页面卡顿瓶颈

张开发
2026/4/13 22:15:13 15 分钟阅读

分享文章

如何分析Laravel慢查询日志并在phpMyAdmin中进行性能优化_添加索引解决页面卡顿瓶颈
真正拖慢页面的常是高频重复执行的SQL如循环查头像单次20ms但累计占800ms需用DB::listen()记录并统计频次而非只盯单条耗时。怎么看 Laravel 的慢查询日志里哪条 SQL 真正拖慢了页面laravel 默认不记录慢查询得先配好 db::listen() 或用 slowlog 驱动如 mysql 的 slow_query_log。真实瓶颈往往藏在“单次执行不慢、但高频重复执行”的 sql 里比如循环中查用户头像——日志里可能每条只耗 20ms但加起来占了整页 800ms。实操建议在 AppServiceProvider::boot() 中用 DB::listen() 记录执行时间 SQL 绑定参数写入文件或日志通道别只看 query_time 1000 这种硬阈值用 grep -A 2 -B 2 SELECT.*from users storage/logs/laravel.log 定位同一 SQL 出现频次比单纯看耗时更准注意日志里带问号的 SQL如 select * from posts where user_id ?它代表预处理语句真实执行时参数不同可能导致索引失效不能直接拿去 phpMyAdmin 测试在 phpMyAdmin 里怎么模拟 Laravel 查询并验证索引是否生效phpMyAdmin 不是黑盒测试工具它显示的 EXPLAIN 结果必须和 Laravel 实际执行的 SQL 完全一致否则结论无效。常见错误是直接复制日志里的带问号语句去执行结果 EXPLAIN 显示 typeALL但线上其实走了索引——因为没传真实参数MySQL 优化器判断失准。实操建议从日志里提取完整 SQL把 ? 替换成实际值如 user_id 123再粘贴进 phpMyAdmin 的 SQL 标签页执行 EXPLAIN SELECT ...重点看 key 列是否非 NULL、rows 是否远小于表总行数、Extra 里有没有 Using filesort 或 Using temporary如果 WHERE 有多个字段如 status ? AND created_at ?联合索引顺序必须匹配最左前缀INDEX(status, created_at) 有效反过来就无效Laravel 迁移里加索引的写法和容易被忽略的坑加索引不是加了就完事。Laravel 的 Schema::table() 默认用 addIndex()但 MySQL 对大表会锁表线上直接跑迁移可能让页面卡死几分钟。另外Eloquent 的 withCount()、whereHas() 等隐式关联查询常被忽略索引需求。立即学习“PHP免费学习笔记深入” 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手依托大模型帮助用户记录、整理和分析音视频内容体验用大模型做音视频笔记、整理会议记录。

更多文章