日期:2014-05-18  浏览次数:20341 次

在线等,优化查询语句.急急!
select   gzrq   from   [@hbu1skd]

  where   bh   in   (select   skdh   from   [@hbu1skmx]   where  

(fybm= '续保费 'or   fybm   like   '保险费% ')and

  yfybh   in   (select   bh   from   [@hbu4hkmx]  

where   year(fkq)=year( ' "   +   sjfkq   +   " ')  

and   month(fkq)=month( ' "   +   sjfkq   +   " ')    

and   pzh= ' "   +   PZH   +   " '))

能不能优化一下,提高执行效率.

------解决方案--------------------
将in都换成exists
------解决方案--------------------
尽量不要用in,把OR拆开,把对字段的操作都转换成对值的操作,效率就上去了

------解决方案--------------------
select gzrq from [@hbu1skd],[@hbu1skmx],[@hbu4hkmx]
where [@hbu1skd].bh = [@hbu1skmx].skdh and [@hbu1skmx].fybm= '续保费 ' and
[@hbu1skd].yfybh = [@hbu4hkmx].bh and [@hbu4hkmx].fkq= ' " + sjfkq + " ' and
[@hbu4hkmx].fkq= ' " + sjfkq + " ' and [@hbu4hkmx].pzh= ' " + PZH + " '
union
select gzrq from [@hbu1skd],[@hbu1skmx],[@hbu4hkmx]
where [@hbu1skd].bh = [@hbu1skmx].skdh and [@hbu1skmx].fybm like '保险费% ' and
[@hbu1skd].yfybh = [@hbu4hkmx].bh and [@hbu4hkmx].fkq= ' " + sjfkq + " ' and
[@hbu4hkmx].fkq= ' " + sjfkq + " ' and [@hbu4hkmx].pzh= ' " + PZH + " '
--比方说上面这个,在日期转换那,你要看看怎么样就符合了过滤条件了