select sum(nvl(sum(r.stat_total_prem),0) + nvl(sum(r.weak_add_prem),0) + nvl(sum(r.occu_add_prem),0)) modal_total_prem
from rn_paid_info r
where r.policy_no =‘’
and r.amt_type not in ('245','345')
and r.prem_due_date >=‘’
and r.prem_due_date <= ‘’
group by r.prem_due_date;
(空的是查询条件,省略不写,数据库是oracle11g)
为防止一些细节说不清楚,我直接把带吧贴上来,对于rn_paid_info这个表里有多个索引,其中为了这个查询建立了一个组合索引
IX_RN_PAID_INFO_POL_PREDUD(POLICY_NO, PREM_DUE_DATE, AMT_TYPE),
其中还有一个索引IX_RN_PAID_INFO_5(PREM_DUE_DATE),其中两个索引,组合索引的查询非常效率,每天查看批次执行结果的时候发现含这个sql的存储过程走的是PREM_DUE_DATE索引,经常执行超时,如果单摘出来此sql的话,查看执行计划他的确走的是组合索引,现在就不知道问题出在哪了,如果是只解决此问题的话加/* + IX_RN_PAID_INFO_POL_PREDUD */应该就行了,但是这种情况为什么会出现呢?
from rn_paid_info r
where r.policy_no =‘’
and r.amt_type not in ('245','345')
and r.prem_due_date >=‘’
and r.prem_due_date <= ‘’
group by r.prem_due_date;
(空的是查询条件,省略不写,数据库是oracle11g)
为防止一些细节说不清楚,我直接把带吧贴上来,对于rn_paid_info这个表里有多个索引,其中为了这个查询建立了一个组合索引
IX_RN_PAID_INFO_POL_PREDUD(POLICY_NO, PREM_DUE_DATE, AMT_TYPE),
其中还有一个索引IX_RN_PAID_INFO_5(PREM_DUE_DATE),其中两个索引,组合索引的查询非常效率,每天查看批次执行结果的时候发现含这个sql的存储过程走的是PREM_DUE_DATE索引,经常执行超时,如果单摘出来此sql的话,查看执行计划他的确走的是组合索引,现在就不知道问题出在哪了,如果是只解决此问题的话加/* + IX_RN_PAID_INFO_POL_PREDUD */应该就行了,但是这种情况为什么会出现呢?
另外POLICY_NO,好熟悉的名字,保险公司的代码吗。。
按道理说不应该呀,如果可以的话,搞个测试环境,多弄一些数据,然后给POLICY_NO加上单独的索引,试试效果保险业务,一般只要不是承保的生命周期表之类的,数据量也不会太大,应该都可以加索引的,如果实在不行,就试试你说的用hint强制让他走组合索引看看行不行
按道理说不应该呀,如果可以的话,搞个测试环境,多弄一些数据,然后给POLICY_NO加上单独的索引,试试效果保险业务,一般只要不是承保的生命周期表之类的,数据量也不会太大,应该都可以加索引的,如果实在不行,就试试你说的用hint强制让他走组合索引看看行不行
恩,我找个测试环境试试吧,是在不行就只能用hint了, = =问题是能解决,感觉有点不甘心啊