6
回答
这个SQL(Oracle)如何优化
注册华为云得mate10,2.9折抢先购!>>>   

目前执行一次88秒

举报
wdwnet
发帖于11个月前 6回/230阅
我不知道你的业务场景是什么,但是看你这sql,可以不用full join 。 select count(1) from CK T2 left join TEM_C1 T1 on T1.BAR_CODE = T2.dnb_ccbh where … where 后面和你的一样。你where后面用了个T2.TQID IS NOT NULL 就和你的full join自相矛盾了,所以可以用left join 代替。
--- 共有 3 条评论 ---
MnameHZJ 回复 @wdwnet : 我这样改写了一下,不知道能不能解决问题,你可以试试: select count(1) from CK T2 where T2.TQID is not null and not exists (select 1 from TMP_C1 T1 where T1.ASSET_NO = T2.asset_no and T1.TG_NO = T2.TQID) 11个月前 回复
wdwnet没错,但leftjion也40多秒 11个月前 回复
MnameHZJT2放到前面,然后left join 11个月前 回复

select count(1) from
(select asset_no,tg_no,bar_code from tmp_c1) t1
join
(select asset_no,tqid,dnb_ccbh from ck where tqid is not null) t2
on t1.bar_code=t2.dnb_ccbh
where (t1.asset_no <> t2.asset_no or t1.tg_no <> t2.tqid) ;

走不走索引 要看优化器的判断 如果认为走全表扫描比走索引更好 那就全表  通常和命中的数据集占比有关,也可以  select /*+ index(table,index_name)*/ field1,field2 from xxx ; 强制使用索引

--- 共有 3 条评论 ---
wdwnet 回复 @prey : 合成1个表就正常了,零点几秒 11个月前 回复
prey 回复 @wdwnet : 最终结果是多少呢 11个月前 回复
wdwnet运行了一下,50多秒 11个月前 回复
顶部