为了账号安全,请及时绑定邮箱和手机立即绑定

PHP/Laravel 查询效率

PHP/Laravel 查询效率

PHP
侃侃无极 2022-01-08 20:18:52
我正在计算篮球统计数据,并有模型 Stat、User(篮球运动员所在的位置)、Team、Stat_Meta、Game、Season、Substitution。我有一个名为 statTable 的视图,可以添加到应用程序的任何其他视图中。statTable 基本上只是遍历团队中的每个球员并检索每个统计类型的计算(在 Stat_Meta 模型中找到)。在这些计算中,有针对 Stat、Game、Season 等表的查询。当它遍历每个玩家及其所有统计数据时,我们看到每场比赛大约有 500 个查询(通常我们会经历大约 30 个查询/视图,所以你算一算,这很糟糕)。我的问题:安装 Laravel 调试栏后,我可以看到在我的测试环境中,加载首页时运行了 3,116 个查询,其中 2,432 个是重复的。加载也需要很长时间。那么,我怎样才能重新设计这个查询系统来减少它们的数量呢?完全披露,我不是 CS 人,所以效率不是我受过的训练。现在,我非常高兴这甚至可以工作,但不会花费我一条胳膊和一条腿来做所有这些大规模查询(更不用说可怕的用户体验)。
查看完整描述

1 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

你可以使用 Laravel 的eager loading对查询进行一些优化。官方文档中急切加载的定义:

当访问 Eloquent 关系作为属性时,关系数据是“延迟加载”的。这意味着在您第一次访问该属性之前,不会实际加载关系数据。但是,Eloquent 可以在查询父模型时“预先加载”关系。急切加载缓解了 N + 1 查询问题。

您可以从我提供的链接中阅读一些很好的示例。我相信这会大大优化您的查询。

除了急切加载之外,您应该始终致力于尽可能多地完成查询,而不是使用 PHP、Laravel 集合等处理数据。


查看完整回答
反对 回复 2022-01-08
  • 1 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信