J'obtiens des performances très étranges sur la version 9.1 de DB2 lorsque je lance la requête ci-dessous :
select a.CYCL_NUM
, a.AC_NUM
, a.AUTHS_DTE
, a.PL_ID
, a.APRVD_RSPN_CDE
, a.AUTHS_AMT
, a.AUTHS_STS_CDE
, a.TRAN_CTGR_CDE
, a.MRCHN_CTGR_CDE
, d.out_pu_au_amt
from nwhd12.chldr_auths a, nwhd12.w_chldr_ac d
where cycl_num = 200911
and a.ac_num = d.ac_num
and APRVD_RSPN_CDE = 'APV'
and not exists (
select 1 from auths_rev_hist b
where a.cycl_num = b.cycl_num
and a.auths_dte = b.auths_dte
and a.TRAN_CTGR_CDE = b.TRAN_CTGR_CDE
and a.PL_ID = b.pl_id
and a.APRVD_RSPN_CDE = b.APRVD_RSPN_CDE
and a.AUTHS_AMT = b.auths_amt
and a.TRAN_CTGR_CDE = b.TRAN_CTGR_CDE
and a.MRCHN_CTGR_CDE = MRCHN_CTGR_CDE
)
;
Ce qui est censé se passer, c'est que la requête accède à la partition 97 de nwhd12.chldr_auths, puisque c'est la partition correspondant au cycle 200911. Au lieu de cela, après avoir accédé à la partition 97, elle commence à accéder à toutes les autres partitions de nwhd12.chldr_auths. On m'a dit que cela était dû à l'instruction "WHERE NOT EXISTS", mais il y a toujours la restriction sur les cycles dans cette instruction (a.cycl_num = b.cycl_num), alors pourquoi analyse-t-elle toutes les partitions ?
Si je code en dur le cycle dans le where not exists, alors la requête fonctionne comme prévu.
Merci, Dave