请大家看看下班的这个sql有什么可优化的地方,最好加下原理,非常感谢
SELECT
count(a.EVT_ID) as NUM
FROM PACCESSVIEW.Ivc_List a
inner join PACCESSVIEW.indiv_crd_act_rln b
on a.ivc_act=b.csr_act_crd_num
and b.crd_num=#trnNum#
WHERE a.TXN_DTE >= #qrySttDte#
AND a.TXN_DTE<= #qryEndDte#
AND a.CSR_ID =#csrId#
AND b.CRD_BOK_IND ='0'
--AND b.CRD_BOK_IND ='1'
AND a.PRT_REP_FLG=#prtFlg#
AND a.TXN_AMT=#txnAmt#
以下是现有的索引:
CREATE INDEX "CBMART"."IVC_LIST1"
ON "CBMART"."IVC_LIST"
("IVC_ACT" ASC,
"CSR_ID" ASC,
"TXN_DTE" ASC)
IN "IDX_IVC"
PCTFREE 10
ALLOW REVERSE SCANS;
CREATE INDEX "CBMART"."IVC_LIST2"
ON "CBMART"."IVC_LIST"
("LST_AMD_DTE" ASC)
IN "IDX_IVC"
PCTFREE 10
ALLOW REVERSE SCANS;
CREATE INDEX "PDATA"."INDIV_CRD_ACT_RL1"
ON "PDATA"."INDIV_CRD_ACT_RLN"
("CRD_NUM" ASC,
"CSR_ACT_CRD_NUM" ASC,
"INDIV_CSR_ID" ASC)
PCTFREE 10
ALLOW REVERSE SCANS;
------解决方案--------------------------------------------------------
看执行计划吧 sql优化需要知道的原理太多了。。。
------解决方案--------------------------------------------------------
楼主建的复合索引应该没什么可优化的
如果单从结构上的说可以表改成按TXN_DTE,CRD_BOK_IND这种重复值较多的列分区
如果是dpf环境可以把ivc_act,csr_act_crd_num这种值比较分散的关联字段设为数据库分区键