请帮忙看看使用关联查询或者是with.. as能否优化如下sql语句?

wangyangcheng 2013-03-12 05:44:23
select bc.corpid, bc.memberid, bc.feenumber, bc.shortnumber, bc.groupflag,
ci.validflag,
cf.feetype
from corpmember bc, corpinfo ci, corpfeetype cf
where bc.shortNumber=:1
and bc.corpid=ci.corpid
and ci.corpid=cf.corpid
and ci.corpid in (select c1.corpid from corpinfo c1, corpinfo c2 where c1.PARENTCORPID = c2.PARENTCORPID and c2.PARENTCORPID<>0 and c2.corpid=:2 )

各位有不有其它的优化办法?

由于括号里面的select子句可能会返回多行结果,我觉得使用with..as没什么意义了.

如果是使用corelated subquiries是否有性能提升呢?
...全文
362 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
music_mouse 2013-03-20
  • 打赏
  • 举报
回复
如果前面的条件都要强制关联的话,那 ci.corpid in (select c1.corpid from corpinfo c1, corpinfo c2 where c1.PARENTCORPID = c2.PARENTCORPID and c2.PARENTCORPID<>0 and c2.corpid=:2 ) 优化的空间只能在这里了
dut703 2013-03-20
  • 打赏
  • 举报
回复
试下 select bc.corpid, bc.memberid, bc.feenumber, bc.shortnumber, bc.groupflag, ci.validflag, cf.feetype from corpmember bc, corpinfo ci, corpfeetype cf where bc.shortNumber=:1 and bc.corpid=ci.corpid and ci.corpid=cf.corpid and ci.corpid is not null and ci.corpid in (select /*+ no_merge */ c1.corpid from corpinfo c1, corpinfo c2 where c1.PARENTCORPID = c2.PARENTCORPID and c2.PARENTCORPID<>0 and c2.corpid=:2 )
wangyangcheng 2013-03-20
  • 打赏
  • 举报
回复
上面这个我仔细分析了一下,感觉还真没有优化空间了。 需要请高手再帮忙分析一下。
wangyangcheng 2013-03-19
  • 打赏
  • 举报
回复
引用 2 楼 music_mouse 的回复:
尝试一下用exists 替换in
这个效率差不多的吧?
wangyangcheng 2013-03-19
  • 打赏
  • 举报
回复
引用 楼主 wangyangcheng 的回复:
select bc.corpid, bc.memberid, bc.feenumber, bc.shortnumber, bc.groupflag, ci.validflag, cf.feetype from corpmember bc, corpinfo ci, corpfeetype cf where bc.shortNumber=:1 ……
(select c1.corpid from corpinfo c1, corpinfo c2 where c1.PARENTCORPID = c2.PARENTCORPID and c2.PARENTCORPID<>0 and c2.corpid=:2 ) 上面这个子句可能是返回多行记录结果的.
music_mouse 2013-03-13
  • 打赏
  • 举报
回复
尝试一下用exists 替换in
shiyiwan 2013-03-13
  • 打赏
  • 举报
回复
SELECT BC.CORPID, BC.MEMBERID, BC.FEENUMBER, BC.SHORTNUMBER, BC.GROUPFLAG, CI.VALIDFLAG, CF.FEETYPE
  FROM CORPMEMBER BC, CORPINFO CI, CORPFEETYPE CF
 WHERE BC.SHORTNUMBER = :1
   AND BC.CORPID = CI.CORPID
   AND CI.CORPID = CF.CORPID
   AND CI.PARENTCORPID IS NOT NULL
   AND CI.PARENTCORPID = (SELECT PARENTCORPID
                            FROM CORPINFO
                           WHERE PARENTCORPID <> 0
                             AND CORPID = :2
                             AND ROWNUM <= 1)

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧