近期粮食局OA系统上,客户方反馈全局查询页面打开非常的慢。粮食局OA系统是2019年按照粮食局的业务需求使用Joomla定制开发的一套OA系统,因为当时交付时间比较急,所以并没有做超大量数据集的测试,初步判断是运行时间久了,产生了大量数据导致查询很慢。

问题描述


正常打开全局查询页面只需要1秒,而现在大概需要9秒。

第一反应就是怀疑是不是页面加载了外部的css/js资源导致网页打开速度慢。通过控制台观察,发现并不是资源加载的问题。

第二个可能就是数据量太大了。对于这种情况,查看了数据库该表的数据量并不大,不到10万条,正常情况下不应该这么慢才对。开启调试模式后,发现sql存在慢查询,有一个查询大概需要等待8秒才能返回。因此,定位了问题,下一步就是如何优化。

解决问题


分析了查询语句,发现这个查询语句中用了大量的leftJoin,链接了6张表,且多种情况下是一对多的关系。另外了一个问题就是使用排序和分组。看到这里基本上就明白了出问题的原因。对sql查询语句进行了改进。

由于前期客户需求不确定,提出了很多要求,为了满足这些要求,将这个查询设计得非常的复杂。后期客户的需求定下来了,有一部分的功能是可以简化的。因此对整个查询语句进行了重写。调整了主表,将不必要的链接也在主查询中移除掉。

更新后,刷新全局查询页面,秒开。问题解决。

经验总结


当出现慢查询的时候,我们应该首先的分析所写的查询语句是否有问题。在做复杂查询的时候尽量少链接表。将一些不必要的链接(比如子表中无需搜索和排序的字段)从查询中移除。然后在结果集中试用二次查询得到完整的数据。

给数据表创建索引是能够提高查询速度的,但在创建索引前,我们更应该关注的是SQL语句的本身。

 

评论 (0)

  • 最新在前
  • 最佳在前

Joomla! 除错面板

会话

方案信息

内存使用量

数据库查询