首先启用查询日志并记录执行时间,使用DB::enableQueryLog()捕获sql语句及耗时,筛选time>100ms的慢查询;接着通过laravel Debugbar可视化分析数据库调用次数与重复查询;再利用Telescope监控所有数据库活动,查看执行时间与调用位置;同时在appServiceProvider中使用DB::listen拦截超时查询并写入日志;最后对慢查询执行EXPLaiN分析执行计划,检查索引使用情况,避免全表扫描与文件排序,优化SQL性能。

如果您在使用 Laravel 开发应用时发现数据库查询响应缓慢,可能是由于未优化的 SQL 查询或频繁的数据库调用导致。为了定位性能瓶颈,需要对数据库查询进行详细分析。以下是几种有效的性能分析方法。
本文运行环境:macBook Pro,macOS Sonoma
一、启用查询日志并记录执行时间
通过开启 Laravel 的查询日志功能,可以捕获所有执行的 SQL 语句及其执行时间,便于后续分析慢查询。
1、在代码中启用查询日志:DB::enableQueryLog()。
2、执行您要测试的业务逻辑,例如调用某个控制器方法或服务。
3、获取查询日志数据:DB::getQueryLog(),返回包含 SQL、绑定参数和执行时间的数组。
4、遍历日志,筛选出执行时间较长的查询,重点关注 time 值大于 100ms 的条目。
二、使用 Laravel Debugbar 进行可视化分析
Laravel Debugbar 是一个开发调试工具,能够在页面底部显示详细的请求信息,包括数据库查询次数、SQL 内容和执行时间。
1、通过 composer 安装 Debugbar:composer require barryvdh/laravel-debugbar –dev。
2、发布配置文件:php artisan vendor:publish –provider=”BarryvdhDebugbarServiceProvider”。
3、访问目标页面,查看底部 Debugbar 面板中的 database 选项卡。
4、检查查询数量是否过多,是否存在重复查询,并点击单条 SQL 查看其执行堆栈。
三、利用 Laravel Telescope 监控数据库活动
Laravel Telescope 提供了强大的本地开发监控能力,能够记录数据库查询、请求、异常等信息。
1、安装 Telescope:composer require laravel/telescope。
2、发布资源:php artisan telescope:install 并运行迁移命令。
3、启动服务后访问 /telescope 路径进入仪表盘。
4、切换到 Queries 标签页,查看所有数据库操作的详细信息,包括运行时间、影响行数和调用位置。
四、使用 DB::listen 拦截慢查询
通过监听数据库查询事件,可以在每次查询执行后判断其耗时,并将超过阈值的查询记录到日志中。
1、在 AppServiceProvider 的 boot 方法中添加监听器:DB::listen。
2、设置监听回调函数,接收 $query、$bindings、$time 和 $connection 参数。
3、判断 $time 是否超过预设阈值(如 50ms),若超过则写入日志:Log::warning(‘Slow query’, […])。
4、结合 Laravel 日志系统,定期检查 storage/logs 中的慢查询记录。
五、结合 EXPLAIN 分析 SQL 执行计划
对于发现的慢查询,使用 EXPLAIN 命令分析其执行计划,确认是否使用索引、是否存在全表扫描等问题。
1、复制可疑的 SQL 语句,在数据库客户端中执行:EXPLAIN select …。
2、查看输出结果中的 type、key、rows 和 Extra 字段。
3、确认是否使用了正确的索引,避免出现 type=ALL 或 Extra=using filesort。
4、根据分析结果优化 SQL 或添加合适的数据库索引。
以上就是laravel怎么对数据库查询进行性能分析_laravel数据库查询性能分析方法的详细内容,更多请关注php中文网其它相关文章!


