LaravelAPI性能慢怎么优化_Laravel查询与缓存优化步骤【指南】

云浩同学_5595

云浩同学_5595

2026-04-24

560人浏览

原创

查数据库慢应先用DB::enableQueryLog()和dd(DB::getQueryLog())定位SQL问题,关注time和query字段,结合EXPLAIN分析索引与全表扫描,再优化N+1、缓存策略及外部调用。

laravelapi性能慢怎么优化_laravel查询与缓存优化步骤【指南】

查数据库慢,先看 DB::enableQueryLog() 和 dd(DB::getQueryLog())

Laravel API 慢,八成卡在查询上。别急着加缓存,先确认是不是 SQL 本身有问题——比如 N+1、没走索引、或一次性拉了太多字段。

  • 在路由或控制器开头加 DB::enableQueryLog(),请求结束后用 dd(DB::getQueryLog()) 看实际执行了哪些语句、耗时多少
  • 注意 DB::getQueryLog() 在生产环境默认关闭,且只对当前请求有效;不要在中间件里全局开,容易漏掉或干扰
  • 重点盯 time 字段(单位毫秒)和 query 内容:有没有重复出现的相同查询?有没有 select * 拉了 20 个字段但只用 2 个?
  • 配合 MySQL 的 EXPLAIN 手动分析慢查询:把日志里的 SQL 复制出来,在数据库客户端前加 EXPLAIN 运行,看 type 是不是 ALL(全表扫描)

Eloquent::with() 用不对,缓存也救不了 N+1

很多人以为加了 cache() 就万事大吉,结果缓存的是 100 条数据 + 100 次关联查询,反而更慢。

  • with() 必须显式指定要预加载的关联,且只能用于已定义 belongsTo / hasMany 等关系的模型
  • 避免嵌套过深:比如 with(['user.posts.comments']) 容易触发笛卡尔积,优先拆成两步查,或改用 load() 按需加载
  • 如果关联数据量大且不常变,可单独缓存关联结果,比如 Cache::remember("user_{$id}_posts", 3600, fn() => $user->posts),而不是缓存整个用户对象
  • 慎用 withCount():它会生成子查询,大数据量下比 with() 更吃性能;真需要计数,考虑冗余字段或物化视图

Redis 缓存不是万能胶,Cache::remember() 的 key 设计决定命中率

缓存没效果?大概率是 key 冲突或粒度太粗,导致缓存写入了却从不被读到,或者一更新全崩。

laravel-specialist
laravel-specialist

精通 Laravel 10+,遵循现代 PHP 实践的 Laravel 专家。擅长优雅语法、Eloquent ORM、队列系统及企业级特性...

下载
  • key 必须包含所有影响结果的变量:比如分页接口不能只用 "posts",得是 "posts_page_{$page}_limit_{$limit}_sort_{$sort}"
  • 避免用动态 ID 做 key 主体(如 "user_{$id}"),而要用业务语义明确的标识(如 "user_profile_{$id}"),否则容易和其他缓存混用
  • 设置合理过期时间:用户资料可设 24 小时,实时订单状态最多 5 分钟;别全写 3600 图省事
  • 注意缓存穿透:查不到的数据也要缓存空值(如 Cache::remember($key, 60, fn() => $model ?? null)),并加 ?? null 防止 null 被当成未命中反复查库

API 响应慢,可能根本不是 Laravel 的问题

有时候 profile 出来全是 Illuminate\Database\Connection::select() 耗时高,但真实瓶颈在外部服务或网络层。

  • 检查是否在循环里调用外部 HTTP 请求(比如每条记录都 Http::get() 查第三方 API),这种必须批量合并或异步处理
  • 确认 Redis 或数据库连接是否复用:Laravel 默认用 PDO 长连接,但如果部署在 Serverless 或短命容器里,频繁重建连接会拖慢首字节响应
  • 用 php artisan tinker 单独跑一遍核心逻辑,排除框架启动开销;再用 curl -w "@curl-format.txt" -o /dev/null -s http://api.test/xxx 测真实 HTTP 层延迟
  • 日志里出现 PDOException: SQLSTATE[HY000] [2002] Connection refused 或 Redis::connect(): php_network_getaddresses,说明连接池配置或网络策略有问题,缓存和查询优化都白搭

真正卡顿的地方,往往藏在「查了什么」和「谁在等谁」里。查日志、看连接、测单点,比直接改代码更省时间。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关文章

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

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

下载

相关标签:

laravel

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

相关专题

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

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

2024.04.09

877

10

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

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

2024.04.09

855

9

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

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

2024.04.09

2508

10

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

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

2024.04.10

4541

7

laravel入门教程
laravel入门教程

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

2025.08.05

6610

22

laravel实战教程
laravel实战教程

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

2025.08.05

4356

13

laravel面试题
laravel面试题

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

2025.08.05

8169

7

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

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

2026.03.04

1496

29

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

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

2026.04.09

215

6

热门下载

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

精品课程

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

共1课时 | 218人学习

Composer手册
Composer手册

共0课时 | 0人学习