网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>数据库技术>>Oracle技术>>Oracle开发>查看文档  
  对外连接的表加上条件后将会使外连接失效     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:112次  录入:管理员--2008-03-07  
 

现象:一条sql的运行突然变得很慢。

select uidtable.column_value, first_name||' '||last_name, 
company, job_title, upper(member_level), upper(service_value)
from (select * from table(select cast(multiset
(select b from bbb)as taaa) from dual)) uidtable,member
where uidtable.column_value = member.login_id(+) and 
member.site='alibaba' and member.site='test';

原因:经检查错误得原因是用户增加了一个条件member.site=test,造成连接的顺序变化了,原来的驱动表是uidtable(最多1024条记录),现在变成了member表做驱动(600w条)。所以这条语句变得特别慢。

但是既然是外连接,为什么连接的顺序会改变呢?因为外连接的连接顺序不是由cost决定的,而是由连接的条件决定的。发现执行计划如下:

-------------------------------------------------
| id | operation | name | rows | bytes | cost |
------------------------------------------------
| 0 | select statement | | 1018 | 72278 | 8155 |
| 1 | nested loops | | 1018 | 72278 | 8155 |
| 2 | view | | 4072 | 69224 | 11 |
| 3 | collection iterator subquery fetch| | | | |
| 4 | table access full | dual | 4072 | | 11 |
| 5 | table access full | bbb | 41 | 287 | 2 |
| 6 | table access by index rowid | member | 1 | 54 | 2 |
|* 7 | index unique scan | member_site_lid_pk | 4 | | 1 |
-------------------------------------------------

大家要问:“为什么根本就没有执行外连接呢?”问题出在member.site='test'这个条件上,因为对外连接的表加了条件,造成外连接失效。改为member.site(+)='test'后,问题彻底解决。

---------------------------------
| id | operation | name | rows | bytes | cost |
-----------------------------------------------------
| 0 | select statement | | 1018 | 72278 | 8155 |
| 1 | nested loops | | 1018 | 72278 | 8155 |
| 2 | view | | 4072 | 69224 | 11 |
| 3 | collection iterator subquery fetch| | | | |
| 4 | table access full | dual | 4072 | | 11 |
| 5 | table access full | bbb | 41 | 287 | 2 |
| 6 | table access by index rowid | member | 1 | 54 | 2 |
|* 7 | index unique scan | member_site_lid_pk | 4 | | 1 |
-----------------------------------------------------

 
 
上一篇: 奇怪的sql:排序方法不同但结果却是一样的    下一篇: 使用简化连接时如何才能不显示输入密码
  相关文档
教你快速掌握oracle数据库的备份策略 04-14
处处设防 数据库安全性策略详细介绍 04-11
实例讲解sql_trace和access path的用法 (1) 04-07
oracle数据库中获取数据的存储过程示例 08-05
实例讲解清除oracle10g rac crs的方法 02-27
详细讲解oracle表分区的相关概念及其优点 (1) 03-17
如何使用ruby脚本调用oracle存储过程 03-11
在数据字典中直接修改表列的名称和顺序 06-17
windows下oracle 9i数据库文件的自动备份 07-11
在操作系统损坏时恢复Oracle10g全过程 05-27
oracle数据库10g环境下修改vip地址的方法 07-25
三步教会你掌握oracle外表(external table) 08-18
在oracle中添加用户 赋权 修改密码 解锁 05-29
轻松解决oracle xdb的8080端口冲突问题 03-03
讲解sql server定时作业job的设置方法 07-28
Oracle数据库系统使用经验六则 01-15
帮你完全了解 Oracle 标签安全测试 05-13
视图上含有row_number分析函数没法走索引 03-10
解析:怎样屏蔽oracle中的英文提示信息 11-19
Oracle 9i应用COMPOSE和UNISTR创建沉音 07-07
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息