php – 优化查询 – 急切加载需要太多内存
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 优化查询 – 急切加载需要太多内存,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1789字,纯文字阅读大概需要3分钟。
内容图文
![php – 优化查询 – 急切加载需要太多内存](/upload/InfoBanner/zyjiaocheng/954/02c737a668b44c06b0ad45341528d680.jpg)
我有以下表格:
>用户(约1.000行)
>粉丝(约100.000行) – 一个用户有很多粉丝,一个粉丝属于一个用户
>喜欢(大约100.000行 – 用户有很多喜欢,喜欢属于一个用户
现在我想要一张桌子
>用户名
>粉丝数量
>喜欢的人数
这是一个很大的表,我使用jQuery DataTable将它与pagnition一起使用,但这是关于服务器端的.
我已经建立了所有的关系,然后把桌子放在一边:
$users = User::get();
foreach ($users as $user) {
echo $user->name;
echo $user->fans()->count();
echo $user->likes()->count();
}
这是很多查询,我想优化.我的第一次尝试是使用Eager Loading.
$users = User::with('fans', 'likes')->get();
但这对服务器内存来说似乎很苛刻.在我的本地环境中,我有16 MB的memoriy大小的PHP脚本.它总是试图分配更多.
这是正常的吗?
是简单地为脚本提供更多内存的最佳解决方案吗?
我怎样才能优化我的查询?
解决方法:
如果您只想计算记录数量,那么只计算所有记录是没有意义的,现在您可以获得201000行.你应该添加:
public function fansCountRelation()
{
return $this->hasOne('Fan')->selectRaw('user_id, count(*) as count')
->groupBy('user_id');
}
public function likesCountRelation()
{
return $this->hasOne('Like')->selectRaw('user_id, count(*) as count')
->groupBy('user_id');
}
public function getLikesCountAttribute()
{
return $this->likesCountRelation ?
$this->likesCountRelation->count : 0;
}
public function getFansCountAttribute()
{
return $this->fansCountRelation ?
$this->fansCountRelation->count : 0;
}
对于您的用户模型,现在您将只获得1000个用户行聚合数据,供粉丝和喜欢使用.
现在你可以使用:
$users = User::with('fansCountRelation', 'likesCountRelation')->get();
foreach ($users as $user) {
echo $user->name;
echo $user->likes_count;
echo $user->fans_count;
}
但是,如果你确实需要它,你应该重新考虑. 1000行正常使用太多了.如果你将它用于导出目的,那很好,但是如果你只在管理面板中显示它,你应该使用分页.
如果它花费你很多时间,你应该确保你的粉丝有索引,并喜欢user_id列的表.它应该加快你的查询速度.
内容总结
以上是互联网集市为您收集整理的php – 优化查询 – 急切加载需要太多内存全部内容,希望文章能够帮你解决php – 优化查询 – 急切加载需要太多内存所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。