CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  开发

请教各位高手一条SQL的效率问题

楼主ZhangYaoxing(westxx)2005-08-04 12:54:50 在 Oracle / 开发 提问

在工作中遇到一条SQL,在PL/SQL中,我自己完成的写法是  
  select   *    
  from   T_DJ_JGNSR   a   inner   join   T_DJ_JGNSRFB   b   on   a.nsrnbm=b.nsrnbm  
            left   outer   join   T_DJ_JGZYZJPW   c   on   a.nsrnbm=c.nsrnbm  
  选定后F5,出来的结果是Cost   406....  
  后来别人给我改过之后的SQL是:  
  select   count(*)  
  from   T_DJ_JGNSR   a   ,T_DJ_JGNSRFB   b,T_DJ_JGZYZJPW   c  
  where   a.nsrnbm=b.nsrnbm(+)   and  
            a.nsrnbm=c.nsrnbm(+)  
  再F5,结果是Cost   340....  
   
  这三个表中,a/b表是一一对应关系,a/c表是一对多关系,请问为什么后面这种写法Cost要少些呢? 问题点数:50、回复次数:10Top

1 楼ZhangYaoxing(westxx)回复于 2005-08-04 12:56:01 得分 0

更正:后面那条语句应该没有countTop

2 楼bzszp(SongZip)回复于 2005-08-04 13:03:32 得分 15

你看一下执行计划有什么区别,应该就清楚了Top

3 楼bzszp(SongZip)回复于 2005-08-04 13:06:02 得分 0

但是我认为虽然两种写法不通,但是内部执行时应当是一样的。Top

4 楼ZhangYaoxing(westxx)回复于 2005-08-04 13:49:30 得分 0

我刚接触Oracle不久,请问这个Cost小是不是就代表效率更高一些呢?  
  还有你说的执行计划是什么?Top

5 楼ZhangYaoxing(westxx)回复于 2005-08-05 08:43:12 得分 0

顶一下,哪位能帮忙解答一下?谢谢Top

6 楼wbb1980()回复于 2005-08-05 16:31:23 得分 15

你试试这条语句  
  select   count(*)  
  from   T_DJ_JGNSR   a   ,T_DJ_JGNSRFB   b,T_DJ_JGZYZJPW   c  
  where   a.nsrnbm=c.nsrnbm(+)   and  
            a.nsrnbm=b.nsrnbm(+)  
  应该会更快  
  Top

7 楼ZhangYaoxing(westxx)回复于 2005-08-08 19:14:14 得分 0

to   wbb1980  
  今天已经下班了,明天再试吧  
  不过我觉得先连接a和c表的话,第一步就会生成更多记录,占用更多内存,我觉得速度只会更慢才对啊,能解释一下吗?  
   
  另外有谁能解释一下inner/outer   join和(+)有什么不一样呢?Top

8 楼ZhangYaoxing(westxx)回复于 2005-08-10 08:44:20 得分 0

顶一下,希望各位能帮我一把Top

9 楼waterfirer(水清)回复于 2005-08-10 09:28:49 得分 20

outer   join和(+)是一样的,和inner   join不同。  
  inner   join会去掉表中不符合规则的记录,而outer   join相反  
   
  你试试  
  select   *    
  from   T_DJ_JGNSR   a   left   outer   join   T_DJ_JGNSRFB   b   on   a.nsrnbm=b.nsrnbm  
            left   outer   join   T_DJ_JGZYZJPW   c   on   a.nsrnbm=c.nsrnbm  
  这个应该和  
  select   *  
  from   T_DJ_JGNSR   a   ,T_DJ_JGNSRFB   b,T_DJ_JGZYZJPW   c  
  where   a.nsrnbm=b.nsrnbm(+)   and  
            a.nsrnbm=c.nsrnbm(+)  
  差不多。  
  Top

10 楼ZhangYaoxing(westxx)回复于 2005-08-10 12:36:19 得分 0

嗯,这个清楚了。  
  不过我以前看到书上说inner   join的效率应该高一些才对啊,能不能解释一下为什么inner   join的效率会低一些呢?或者提供一些相关的资料?  
  十分感谢Top

相关问题

  • 请教3条sql的效率问题
  • 9i,怎样知道SQL的执行效率,请各位老大指点啊???
  • Sql执行效率
  • ◆◆如何写这条sql语句效率最高?UP者有分◆◆
  • 为什么2条SQL查询,效率差这么多?
  • SQL SERVER的效率问题
  • --求一有效率的sql
  • 提高sql查询效率????
  • 关于SQL效率问题
  • 效率问题请教各位高手!

关键词

  • nsrnbm
  • dj
  • jgnsrfb
  • jgnsr
  • jgzyzjpw
  • cwhere
  • 效率
  • join
  • outer
  • inner

得分解答快速导航

  • 帖主:ZhangYaoxing
  • bzszp
  • wbb1980
  • waterfirer

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo