请问如何提升报表查询速度?大家帮忙出出注意吧~

gKiwi 发布于 2013/08/10 19:19
阅读 277
收藏 0

最近在升级一个系统的报表模块(大概有一百张报表),在一期报表时候,所有的报表查询都是被写成了存储过程,又因为常常一个报表数据 是由多张表数据组成,所以一个报表的存储过程常常达到100-200行。执行效率很低。

现在处理二期,几人经验也比较少就按照领导说的,就将存储过程转为sql,测试了下,速度有了提升,但是仍然很慢,常常一次查询要达到20+秒甚至更多。拿了sql执行,发现时间基本上都消耗在sql上面了,分析了下发现是因为执行sql中的group by太消耗时间,group by后面常常会加上5-7个维度。

目前想到的两种解决方案:

1.就是做沉淀表。大概如下:针对几张常用的报表(7-8张吧),通过task来每5分钟执行查询sql,并记录执行到的主数据表(详单)的主键id,然后在下一次task时候,再从这个id开始执行sql。沉淀表里面则为几个维度建立索引,打算在沉淀表里面根据 "日"来沉淀累加数据,然后在月初按 "月"来沉淀数据。这样子虽然数据虽然不能完全时时,但是速度应该会有提升。

2.提供接口,然后由各个模块推送数据。这样子虽然时时,但是这样子考虑有两个考虑,一个是怕数据量太大(本人臆测...),二个就是这样子需要多写不少代码,配置起来可能有些麻烦。

目前我在正准备尝试第一种的方法,第二种还没有详细考虑。

各位前辈有没有什么辟邪剑谱如来神掌之类的牛叉叉思路来给指引下,不胜感激。

加载中
0
徐迎龙
徐迎龙
用程序算好了以后,实时导入到一张现成的表
0
pandahu
pandahu
列数据库+报表缓存。
返回顶部
顶部