merge into BIG_T A
using (select ..... from B, C where ....) D
on (A.ACTDAT = D.ACTDAT and A.TXNBAK = D.RETABK and A.TRNFLC = D.REFNUM and (A.RETTYP = '21' or A.RETTYP = '21')
when matched then update ...
when not matched then insert ...
A表较大,记录数据达几千万,D表结果集较小。
在原本的执行计划中,A表走了全表扫描,代价最大,整个语句执行时间 00:04:21:00,内存消耗 104GB(逻辑读),IO为16KB(物理读)。
根据前缀性和可选性分析,对A表的(ACTDAT,TXNBAK)创建索引后,全表扫描改为走索引,整个语句执行时间 00:00:01.07,内存消耗51.2MB,IO上涨为4.7MB。