oracle查询快慢,如何提高大表sum统计的查询速度

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值