PHP/Laravel 查询效率

我正在计算篮球统计数据,并有模型 Stat、User(篮球运动员所在的位置)、Team、Stat_Meta、Game、Season、Substitution。

我有一个名为 statTable 的视图,可以添加到应用程序的任何其他视图中。statTable 基本上只是遍历团队中的每个球员并检索每个统计类型的计算(在 Stat_Meta 模型中找到)。在这些计算中,有针对 Stat、Game、Season 等表的查询。当它遍历每个玩家及其所有统计数据时,我们看到每场比赛大约有 500 个查询(通常我们会经历大约 30 个查询/视图,所以你算一算,这很糟糕)。

我的问题:安装 Laravel 调试栏后,我可以看到在我的测试环境中,加载首页时运行了 3,116 个查询,其中 2,432 个是重复的。加载也需要很长时间。那么,我怎样才能重新设计这个查询系统来减少它们的数量呢?

完全披露,我不是 CS 人,所以效率不是我受过的训练。现在,我非常高兴这甚至可以工作,但不会花费我一条胳膊和一条腿来做所有这些大规模查询(更不用说可怕的用户体验)。


侃侃无极
浏览 154回答 1
1回答

胡子哥哥

你可以使用 Laravel 的eager loading对查询进行一些优化。官方文档中急切加载的定义:当访问 Eloquent 关系作为属性时,关系数据是“延迟加载”的。这意味着在您第一次访问该属性之前,不会实际加载关系数据。但是,Eloquent 可以在查询父模型时“预先加载”关系。急切加载缓解了 N + 1 查询问题。您可以从我提供的链接中阅读一些很好的示例。我相信这会大大优化您的查询。除了急切加载之外,您应该始终致力于尽可能多地完成查询,而不是使用 PHP、Laravel 集合等处理数据。
打开App,查看更多内容
随时随地看视频慕课网APP