如何提高大表sum统计的查询速度

我的数据库表每天一张表,表按照24个小时进行分区的,数据量大概有1800万,但是对这个表需要进行半个小时的统计时,每次查询一次数据库要20多秒,但是要对数据库的表进行20多次查询,这样总的时间便很长,无法接受。

但是因为我的这个需求是对50个字段统计的,每个字段统计的公式不相同,但是我现在已经是用decode方式,尽量一次去访问数据库,而不是每一个sql语句访问一次数据库,我抽一个其中的sql:

SELECT 8613900290002,

0,

20100821,

0,

8 AS SERVICETYPE,

SUM(DECODE(CALLTYPE, 2, 1, 0)) AS In_Paging_Ct,

ROUND(SUM(DECODE(CALLTYPE, 2, 1, 0) *

DECODE(FIRSTPAGUTCSEC, 4294967295, 0, 1) *

DECODE(PAGRESPUTCSEC, 4294967295, 1, 0)) /

DECODE(SUM(DECODE(CALLTYPE, 2, 1, 0) *

DECODE(FIRSTPAGUTCSEC, 4294967295, 0, 1)),

0,

NULL,

SUM(DECODE(CALLTYPE, 2, 1, 0) *

DECODE(FIRSTPAGUTCSEC, 4294967295, 0, 1))),

4) AS PagingNo_Ct,

ROUND(SUM(DECODE(CALLTYPE, 2, 1, 0) *

GENEX.GETBIT_N(CALLMSGBITMAP, 84)) /

DECODE(SUM(DECODE(CALLTYPE, 2, 1, 0)),

0,

NULL,

SUM(DECODE(CALLTYPE, 2, 1, 0))),

4) AS In_Bell_Per,

ROUND(SUM(DECODE(CALLTYPE, 2, 1, 0) * DECODE(SUCCFLAG, 1, 1, 0)) /

DECODE(SUM(DECODE(CALLTYPE, 2, 1, 0)),

0,

NULL,

SUM(DECODE(CALLTYPE, 2, 1, 0))),

4) AS In_Respon_Per,

ROUND(SUM(DECODE(CALLTYPE, 2, 1, 0) *

DECODE(GENEX.GETBIT_N(CALLMSGBITMAP, 84), 0, 1, 0) *

DECODE(FIRSTDISCONPOINTID, 500223, 0, 1)) /

DECODE(SUM(DECODE(CALLTYPE, 2, 1, 0)),

0,

NULL,

SUM(DECODE(CALLTYPE, 2, 1, 0))),

4) AS Other_Discon_Per

FROM NE8613900290002.VIEW_PRJPUB_0_20100821 @NE8613900290002

WHERE SYSUTCSEC >= 1282406399

AND SYSUTCSEC <= 1282406399;

已经用索引了,我这个时间是表分区的分区键,因为统计字段的按照分类能在一个sql语句查我尽量放在一个sql语句查了,这样的统计需要查询4个流程的表,即表名不相同,因此一次业务查询数据库要查询20次,已经不能将sql语句合并了,这样时间就比较长,客户要求是3分钟查出来,有什么好办法么?

我单独查询select count(*) FROM NE8613900290002.VIEW_PRJPUB_0_20100821 @NE8613900290002

WHERE SYSUTCSEC >= 1282406399

AND SYSUTCSEC <= 1282406399; 就要20秒,如何提高呀。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐