Laravel怎么处理模型查询性能分析_Laravel慢查询检测技巧【操作】

陌晨吖_5057

陌晨吖_5057

2026-05-01

197人浏览

原创

开启 laravel 慢 sql 日志需在 appserviceprovider::boot() 中使用 db::listen() 监听,判断 $query->time > 500(毫秒),记录超时查询的 sql、绑定参数和耗时,仅限开发环境使用。

laravel怎么处理模型查询性能分析_laravel慢查询检测技巧【操作】

怎么开启 Laravel 查询日志看慢 SQL

默认 Laravel 不记录查询详情,得手动打开。只在开发环境开,生产环境绝对别开,会拖垮性能。

最直接的方式是在 AppServiceProvider::boot() 里加监听:

DB::listen(function ($query) {
    if ($query->time > 500) { // 超过 500ms 认为是慢查询
        \Log::warning('Slow query', [
            'sql' => $query->sql,
            'bindings' => $query->bindings,
            'time' => $query->time,
        ]);
    }
});
  • $query->time 单位是毫秒,别误以为是秒
  • 绑定参数 $query->bindings 是原始值,不带引号,但能帮你还原真实执行的 SQL
  • 别用 dd() 或 dump() 打印,页面会卡死,尤其批量操作时
  • 这个监听对所有数据库连接生效,如果用了多个连接(比如读写分离),要确认监听挂载在哪个连接上

Laravel Scout + Algolia 搜索时查得慢怎么办

Scout 默认每次搜索都走全量同步索引,但真正卡顿往往不是 Algolia 响应慢,而是本地模型关联没预加载,导致 N+1 在搜索后渲染时爆发。

典型场景:搜索出 20 篇文章,再逐个查作者、分类、标签——这时候 with() 比调优 Algolia 更管用。

Laravel Creem Agent
Laravel Creem Agent

Creem 支付商店助理 — 查询订阅、客户、交易、产品,执行心跳检查,管理本地 Laravel支付商店。

下载
  • 确保 toSearchableArray() 返回的数据尽量精简,别塞进大字段(如 content、html)
  • 搜索结果用 Model::hydrate($ids) 或 Model::whereIn('id', $ids)->with(...)->get() 预加载关联,而不是在 Blade 里循环查
  • Algolia 的 search() 本身很快,但 Model::search(...)->get() 底层会查 DB,这步才是瓶颈
  • 如果只是列表展示,考虑用 Model::search(...)->raw() 直接拿 Algolia 原始响应,自己映射 ID 再批量查,更可控

用 when() 动态加 where 条件反而变慢?

看起来很优雅的链式条件,实际可能让 Eloquent 生成冗余 SQL 或干扰查询优化器判断,尤其嵌套多层 when() 加子查询时。

常见错误是把本该提前判断的逻辑塞进 when(),比如空字符串、null 值没过滤就传进去,导致生成 WHERE column = '' 这种无意义条件,还可能命中全表扫描。

  • 先做 PHP 层校验:if (! blank($request->input('status'))) { ... },比全塞进 when() 更清晰也更快
  • when() 里避免调用 DB 查询或复杂函数,它会在每次构建 Query Builder 时执行闭包,重复计算浪费 CPU
  • 注意 when() 和 tap() 的区别:前者是条件分支,后者是无条件介入,别用错
  • 如果条件太多,考虑拆成不同方法,比如 scopeActive()、scopeByCategory(),可读性和可测性更好

为什么加了 select() 还是查了所有字段

因为 Eloquent 默认会用主键和时间戳字段补全,即使你写了 select('id', 'title'),只要调用的是 Model::get(),它仍会尝试 hydrate 完整模型实例,触发访问器、强制加载 created_at 等字段——除非你明确告诉它“别当模型用”。

  • 真只需要几个字段,用 DB::table('posts')->select('id', 'title')->get(),返回的是 stdClass 对象,零模型开销
  • 如果必须用模型但只取部分字段,加 ->toBase()->get() 绕过 Eloquent hydration,但会丢失访问器和属性转换
  • select() 不影响 with() 关联查询的字段,关联表还是全查,得单独给关联加 select()
  • MySQL 8.0+ 开启 optimizer_switch='derived_merge=off' 可能缓解某些子查询场景下的字段膨胀,但属于数据库层,和 Laravel 无关

慢查询真正的麻烦点不在工具开关,而在“你以为在优化的地方,其实根本没生效”。比如开了日志却只盯着时间,忽略了绑定参数里的类型不匹配;或者信了 explain 的输出,却没注意 Laravel 自动生成的隐式 join 把 left join 变成了 inner join。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

laravel

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2024.04.09

837

10

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

2024.04.09

815

9

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2024.04.09

2448

10

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.10

3581

7

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

2025.08.05

5030

22

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

2025.08.05

3396

13

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

2025.08.05

6409

7

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

2026.03.04

1376

29

Laravel 框架安装指南
Laravel 框架安装指南

本指南详解 Laravel 框架安装全流程,涵盖 PHP 8.1+ 环境配置、Composer 依赖管理工具安装及国内镜像源优化。重点演示使用 composer create-project 命令创建 Laravel 10/11 项目,解决常见安装错误与依赖冲突。从环境搭建到项目初始化,助您快速完成 Laravel 开发环境部署,为后续 Web 应用开发奠定基础。适合 PHP 初学者与框架迁移开发者参考。

2026.04.09

195

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何安装 Composer
如何安装 Composer

共1课时 | 197人学习

Composer手册
Composer手册

共0课时 | 0人学习