如何提高大表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秒,如何提高呀。