讲师中心 微信公众号
AI工具推荐 视频效率加速

告别 SELECT *:Hyperf select() 显式指定字段技巧【性能优化】

冬伟大大_7937

冬伟大大_7937

发布时间:2026-08-09 20:53:26

|

850人浏览过

|

来源于php中文网

原创

Hyperf 中 select(*) 会显著增加内存占用并拖慢接口,因其协程常驻特性导致未释放的冗余字段(如大文本、JSON)持续累积,引发内存溢出;连表查询、ORM映射、缓存及游标读取均受字段数量直接影响,必须显式精简字段并严格控制关联查询。

告别 select *:hyperf select() 显式指定字段技巧【性能优化】

为什么 Hyperf 里用 select(*) 会吃内存还拖慢接口

不是 Laravel 那套“习惯性写法”在 Hyperf 里还能蒙混过关。Hyperf 的协程模型对内存更敏感,select(*)(比如 Db::table('users')->get()User::all())会把整行字段全拉回来,哪怕你只用 idname。大文本、JSON、冗余关联字段全进 PHP 内存,协程 Worker 进程常驻,不释放就累积——轻则响应变慢,重则 Fatal error: Allowed memory size of ... exhausted 直接崩。

  • 数据库传输量翻倍:尤其连表后,orders JOIN order_items 可能从 10 万行变成 50 万行结果集
  • ORM 映射开销上升:Hyperf 的 Collection 要为每个字段建属性,字段越多越慢
  • 缓存失效更频繁:Redis 存的 JSON 包含大量不用字段,体积大、更新成本高

select()addSelect() 别混用,顺序和语义必须分清

select() 是覆盖式重置字段列表,addSelect() 是追加,两者行为完全不同。新手常写 ->select('id')->select('status'),结果只有 status;或者想给主查询加统计字段,却误用 select() 把主字段全冲掉了。

Hyperframes Creative
Hyperframes Creative

HyperFrames视频非动画创意指导,包括设计规范(frame.md/design.md)处理、配色、字体设计、旁白及节奏规划等。

下载
  • select('id', 'title') 后再调 select('created_at') → 只剩 created_at
  • 要加聚合或别名字段,必须用 addSelect()->select('user_id')->addSelect(Db::raw('COUNT(*) as cnt'))
  • selectRaw() 本质是 addSelect() 的语法糖,但别指望它能替代主字段声明
  • 关联预加载(with())不继承主查询的 select(),必须单独约束:->with(['profile' => fn($q) => $q->select('user_id', 'avatar')])

Hyperf 模型 + 原生查询字段控制要分开处理

Hyperf 的 ModelDb::table() 虽然都支持 select(),但底层机制不同,容易漏掉一端。比如你在 User::on('read_pool_1') 上做了字段精简,但 with(['posts']) 里的 Post 模型没切读库也没限制字段,照样走默认连接、查全字段。

  • User::select('id','name')->on('read_pool_1')->with(['posts' => fn($q) => $q->select('id','title')->on('read_pool_1')]) —— 主从都要显式控制
  • Db::table('users')->select('id','email')->connection('read_pool_1')->get() —— 原生查询必须先 connection() 再链式调用
  • Db::select() 不接受连接名参数,必须 Db::connection('xxx')->select(...)
  • 字段少了,注意 $casts 和访问器可能不触发:比如没选 content 字段,getFormattedContentAttribute() 就不会跑

游标读取时字段控制比平时更关键

cursor() 或手动 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY = false 流式读取大数据集时,字段越少,单行内存占用越低,GC 压力越小。这时候 select(*) 不只是慢,是直接卡死进程。

  • 连表查询务必只选业务需要的字段,避免 SELECT u.*, o.* 这种写法
  • 大字段(如 TEXTJSON)坚决不选,除非当前循环逻辑真要用到
  • 游标循环中 unset($row['big_field']) 是必要操作,别依赖 GC 自动回收
  • Hyperf 3.1.66+ 的 cursor() 方法已支持流式,但前提是底层 SQL 已明确 select() 字段,否则还是缓冲全量
字段精简看着是小动作,但在协程常驻、高并发场景下,每少一个字段,就是少一次内存拷贝、少一次 ORM 映射、少一次网络传输。最容易被忽略的是关联模型的字段控制——主表写了 select(),不代表子查询也安全了。

相关文章

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

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

下载

相关标签:

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

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

相关专题

更多
PHP 高并发与性能优化
PHP 高并发与性能优化

本专题聚焦 PHP 在高并发场景下的性能优化与系统调优,内容涵盖 Nginx 与 PHP-FPM 优化、Opcode 缓存、Redis/Memcached 应用、异步任务队列、数据库优化、代码性能分析与瓶颈排查。通过实战案例(如高并发接口优化、缓存系统设计、秒杀活动实现),帮助学习者掌握 构建高性能PHP后端系统的核心能力。

13373

2025.10.16

PHP 数据库操作与性能优化
PHP 数据库操作与性能优化

本专题聚焦于PHP在数据库开发中的核心应用,详细讲解PDO与MySQLi的使用方法、预处理语句、事务控制与安全防注入策略。同时深入分析SQL查询优化、索引设计、慢查询排查等性能提升手段。通过实战案例帮助开发者构建高效、安全、可扩展的PHP数据库应用系统。

373

2025.11.13

JavaScript 性能优化与前端调优
JavaScript 性能优化与前端调优

本专题系统讲解 JavaScript 性能优化的核心技术,涵盖页面加载优化、异步编程、内存管理、事件代理、代码分割、懒加载、浏览器缓存机制等。通过多个实际项目示例,帮助开发者掌握 如何通过前端调优提升网站性能,减少加载时间,提高用户体验与页面响应速度。

268

2025.12.30

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

263

2026.03.06

宝塔面板Nginx性能优化与高并发配置实践
宝塔面板Nginx性能优化与高并发配置实践

本专题围绕宝塔环境下的 Nginx 优化展开,深入讲解缓存策略、连接数调优、Gzip 压缩、静态资源加速及反向代理配置。帮助用户提升网站访问速度与并发处理能力。

436

2026.03.25

宝塔面板数据库管理与MySQL性能优化实践
宝塔面板数据库管理与MySQL性能优化实践

本专题围绕宝塔面板中的数据库管理功能展开,系统讲解 MySQL 安装配置、数据库创建与权限管理、慢查询分析及性能优化方法。内容涵盖索引优化、连接数调优、缓存机制配置以及数据库备份策略。通过实操讲解,帮助开发者提升数据库运行效率与稳定性。

185

2026.04.07

Hyperf协程并发编程实操指南
Hyperf协程并发编程实操指南

本专题深度解析 Hyperf 协程底层机制,解决协程环境下全局变量污染、Context 上下文丢失等核心痛点,提供规范化的 PHP 高并发编程实战代码建议。

160

2026.05.19

深入理解Hyperf AOP切面与注解使用
深入理解Hyperf AOP切面与注解使用

详尽介绍 Hyperf 依赖注入容器与 AOP 面向切面编程的使用技巧,包含自定义注解开发流程及注解不生效的排查方案,助力开发者掌握框架核心架构。

424

2026.05.19

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

0

2026.09.23

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Hyperf官方中文手册(3.1)
Hyperf官方中文手册(3.1)

共0课时 | 0人学习

Swoole系列-从0到1-新手进阶
Swoole系列-从0到1-新手进阶

共29课时 | 2.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn