我正在使用Asgard CMS和Laravel 5.1。
我的一个模型,新闻,有大约1800个条目,从数据库获取它们需要15秒。
在前端,获得1-50个参赛作品很好。但是,在后端,我把它们全部拿走,结果令人沮丧。
新闻模型使用3种关系,分类,标签和图像。而且,与新闻一起,所有这些模型都有翻译模型和关系。
我已将所有与新闻相关的表编入索引。我已将服务器升级到带有SSD存储(VPS)的3GB 4核服务器。什么都没有用。
有什么想法可以加快这个过程吗?
答案 0 :(得分:2)
您说CMS每次访问会生成5784个查询。这是一个巨大的数字,你绝对应该重写你的查询。
我建议您了解Eager Loading。您可以手动重写查询或尝试调整您的CMS(我不熟悉Asgard CMS,所以我在这里无法帮助您):
此循环将执行1个查询以检索所有书籍 表,然后另一个查询每本书来检索作者。因此,如果 我们有25本书,这个循环将运行26个查询:1个为原始 书,以及25个额外的查询来检索每本书的作者。
幸运的是,我们可以使用预先加载来减少此操作 2个查询。
答案 1 :(得分:0)
将Eager Loading应用到我的模型后,我将查询计数从5879中删除到117.此外,查询时间从17秒开始降至13秒。
这是一个进步,但这还不够。
只需要1800个条目就不需要这么长时间。在那个时间里,我在其他项目中获得了数百万美元。
有什么建议吗?有什么要点吗?