总结
豆包 AI 助手文章总结
首页 > php框架 > YII > 正文

yii2 batch和each的区别是什么

爱喝马黛茶的安东尼
发布: 2019-12-09 10:58:58
原创
4134人浏览过

yii2 batch和each的区别是什么

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

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

开始准备

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

8a60e96141d4ec6326b1982decda978.png

你看到了,它有主键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 "<br/>";
}
登录后复制

结果那?

76c812c91d7983d6b259b6e94f3d9ef.png

占有内存 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 "<br/>";
    }
}
登录后复制

结果那?

06b11563fafadbf360db899c35200cd.png

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

同样的

$query = new \yii\db\Query();
$query->from('user');
foreach($query->each() as $user){
    echo $user['username'];
    echo "<br/>";
}
登录后复制

each的表现也相当不错

d026e8dabc4d3532b7009f5fee14231.png

结果

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

PHP中文网,有大量免费的Yii入门教程,欢迎大家学习!

以上就是yii2 batch和each的区别是什么的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号