关于SQL的union效率问题,请高手来精减下这个SQL,高分送
select iounbr from ln.tiou where lndate=20070520 and ioust = '2 ' and clttype= 'CM ' //正常
union
select iounbr from ln.tiou where (select coalesce(max(transdate),0) from ln.tlnserver where iounbr=ln.tiou.iounbr)=20070520 and ioust = '4 ' and clttype= 'CM ' //结清
union
select iounbr from ln.tclbook where cldate=20070520 and ioust in ( '6 ', 'A ', 'B ') and iounbr in (select iounbr from ln.tiou where clttype= 'CM ') //转逾期,呆滞,呆帐
union
select iounbr from ln.texpbook where expdate=20070520 and prmark= '1 ' and iounbr in (select iounbr from ln.tiou where clttype= 'CM ') //转展期
union
select iounbr from ln.treplnbk where transdate=20070520 and capinflg= 'A ' and trstype <> '1 ' and iounbr in (select iounbr from ln.tiou where clttype= 'CM ')//还款
上面这个SQL数据库执行要35秒,超时,有没有办法换一种写法,高效率的实现我上面的想法
------解决方案--------------------select iounbr from ln.tiou
where
(lndate=20070520 and ioust = '2 ' and clttype= 'CM ')
or
(cldate=20070520 and ioust in ( '6 ', 'A ', 'B ') and iounbr in (select iounbr from ln.tiou where clttype= 'CM '))
------解决方案--------------------把 in 子查询 改为关联。
------解决方案--------------------弄张临时表行不
------解决方案--------------------同等情况下临时表(分3次查询insert)对性能影响是否小一些?
35秒s锁,涉及表数据修改会不会收到很大影响?