博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Yii2中你可能忽略但很有用的两个方法batch&each
阅读量:5893 次
发布时间:2019-06-19

本文共 1041 字,大约阅读时间需要 3 分钟。

我们的数据库常常都是很庞大的,一次查询的结果集也很大,这样很浪费内存,为了降低内存的使用率,我们可以使用yii2的batch和each方法。

为了让大家看的更明白,我们模拟一个场景,然后通过yii2的debug来查看all与batch/each方法下的内存使用情况。

开始准备

我们先建立一张表,它很简单。

图片描述

你看到了,它有主键id、会员名username、所在省province,现在它是空的。

然后,我们执行了一个循环

set_time_limit(0);for($i=1;$i<=10000;$i++){    Yii::$app->db->createCommand()->insert("user",[        'username'=>'abei'.$i,        'province'=>'北京市'    ])->execute();}

执行后,你知道我们的数据库里有10000条记录了,现在我们开始对比。

对比

为了方便,我们在视图里直接写循环体,如下面代码,你一定可以看懂。

$query = new \yii\db\Query();$query->from('user');foreach($query->all() as $user){    echo $user['username'];    echo "
";}

结果那?

图片描述

占有内存 15.306MB

OK,现在开始看看batch和each的戏法,到底有没有节省内存。

$query = new \yii\db\Query();$query->from('user');foreach($query->batch() as $users){        foreach($users as $user){        echo $user['username'];        echo "
"; }}

结果那?

图片描述

果然,节省了一半的内存。现在仅仅占用了8.077MB

同样的

$query = new \yii\db\Query();$query->from('user');foreach($query->each() as $user){    echo $user['username'];    echo "
";}

each的表现也相当不错

图片描述

结果

当我们遇到需要一次读取出所有的或是大批量数据的时候,可以考虑使用batch和each,这一点点代码的优化帮你省掉了一半的内存。

转载地址:http://pxisx.baihongyu.com/

你可能感兴趣的文章
MMORPG 游戏服务器端设计--转载
查看>>
《星辰傀儡线》人物续:“灭世者”、“疯狂者”、“叛逆者”三兄妹
查看>>
安装系统字体
查看>>
SILK 的 Tilt的意思
查看>>
Html学习笔记3
查看>>
批处理学习笔记8 - 深入学习For命令1
查看>>
微信支付开发(11) Native支付
查看>>
HDFS dfsclient写文件过程 源码分析
查看>>
关于多线程的那些事
查看>>
JavaScript获取DOM元素位置和尺寸大小
查看>>
EL 表达式小结
查看>>
内部排序
查看>>
jQuery EasyUI API 中文文档 - 组合(Combo)
查看>>
10个关于 Dropbox 的另类功用(知乎问答精编)[还是转来了]
查看>>
Oracle体系结构
查看>>
用Modelsim仿真QII FFT IP核的时候出现的Error: Illegal target for defparam
查看>>
javascript Error对象详解
查看>>
nc 局域网聊天+文件传输(netcat)
查看>>
每天一个linux命令(25):linux文件属性详解
查看>>
go微服务框架go-micro深度学习(三) Registry服务的注册和发现
查看>>