带有Asgard CMS的Laravel 5.1,查询执行时间长

时间:2016-03-21 12:28:04

标签: php mysql laravel laravel-5.1

我正在使用Asgard CMS和Laravel 5.1。

我的一个模型,新闻,有大约1800个条目,从数据库获取它们需要15秒。

在前端,获得1-50个参赛作品很好。但是,在后端,我把它们全部拿走,结果令人沮丧。

新闻模型使用3种关系,分类,标签和图像。而且,与新闻一起,所有这些模型都有翻译模型和关系。

我已将所有与新闻相关的表编入索引。我已将服务器升级到带有SSD存储(VPS)的3GB 4核服务器。什么都没有用。

有什么想法可以加快这个过程吗?

2 个答案:

答案 0 :(得分:2)

您说CMS每次访问会生成5784个查询。这是一个巨大的数字,你绝对应该重写你的查询。

我建议您了解Eager Loading。您可以手动重写查询或尝试调整您的CMS(我不熟悉Asgard CMS,所以我在这里无法帮助您):

  

此循环将执行1个查询以检索所有书籍   表,然后另一个查询每本书来检索作者。因此,如果   我们有25本书,这个循环将运行26个查询:1个为原始   书,以及25个额外的查询来检索每本书的作者。

     

幸运的是,我们可以使用预先加载来减少此操作   2个查询。

答案 1 :(得分:0)

将Eager Loading应用到我的模型后,我将查询计数从5879中删除到117.此外,查询时间从17秒开始降至13秒。

这是一个进步,但这还不够。

只需要1800个条目就不需要这么长时间。在那个时间里,我在其他项目中获得了数百万美元。

有什么建议吗?有什么要点吗?