下面两个SQL语句的执行结果有什么区别? (希望能从原理上加以解释,我认为最终执行结果应该一致)
哪个的执行效率会更高?
1
select uniqueNumber from His H left outer join Mth M on H.ondate = M.ondate and H.sno = M.sno and(M.mcode = 100 or M.mcode = 200 or m.mcode = 300)
where M.ondate is null
2
select uniqueNumber from His H left outer join Mth M on H.ondate = M.ondate and H.sno = M.sno where M.ondate is null
and(M.mcode = 100 or M.mcode = 200 or m.mcode = 300)
哪个的执行效率会更高?
1
select uniqueNumber from His H left outer join Mth M on H.ondate = M.ondate and H.sno = M.sno and(M.mcode = 100 or M.mcode = 200 or m.mcode = 300)
where M.ondate is null
2
select uniqueNumber from His H left outer join Mth M on H.ondate = M.ondate and H.sno = M.sno where M.ondate is null
and(M.mcode = 100 or M.mcode = 200 or m.mcode = 300)
解决方案 »
- 【求助】ora-28534 多机种服务预处理错误
- 在oracle企业管理台上无法输入日期?
- oracle查询怪异问题,SELECT * 可以查出数据,select 指定列名报错
- 关于oracle 8i 排序后区前几名的问题?
- OCIEnvNlsCreate 失败,返回代码为 -1,但错误消息文本不可用.
- 请问如何查找两个字段的重复数据?
- T-SQL到PL/SQL:T-SQL中实现范围选择的case语句在PL/SQL中该怎么写
- 我想把不同服务器上的一个表中数据
- 如何取得毫秒?
- Oracle 11G alert_orcl.log中的有以下报警信息 有啥影响? 如何解决?
- oracle远程访问怎么得到它传递数据包信息?
- oracle子查询的一道笔试题目,大家帮搞下,谢谢了!
否刚结果是不一样的
用1语句 左边表所有记录会出现,除了 M.ondate is null
但2 语句 左边的记录只有符合where 条件才会出现在结果集里没说太清楚,不知道楼主能看明白不
如果用RBO,则要看索引结构,数据量等信息,当然直接看执行计划最简单了。不过Oracle10g以后不再支持RBO了,也没必要进行对比了。
第一句左边全部的,右边只限制条件M.ondate is null
第二句左边全部的,但右边限制条件M.ondate is null and (M.mcode = 100 or M.mcode = 200 or m.mcode = 300),多了括号里的条件,左边的数据会过滤更多
但我又看条件为M.ondate is null
这两条查询语句的查询结果应该是一条记录都没有;
为什么呢?
因为已经有条件M.ondate is null 限制了,而连接的时候又存在H.ondate = M.ondate
空值是不相互比较的;
请问,第一句中的连接条件中,下面对右表的and条件是否对左外连接不产生任何限制?
and(M.mcode = 100 or M.mcode = 200 or m.mcode = 300) 请您指导,非常感谢!!!
简单的方法,看执行计划,或者set timing on 看两条语句的执行时间。
呵呵,兄弟,还是有区别的,不然就不会有SQL Tuning了吧!判断条件多的一方理论上效率要低些!
select uniqueNumber from His H inner join Mth M on H.ondate = M.ondate and H.sno = M.sno and(M.mcode = 100 or M.mcode = 200 or m.mcode = 300)2
select uniqueNumber from His H inner join Mth M on H.ondate = M.ondate and H.sno = M.sno where (M.mcode = 100 or M.mcode = 200 or m.mcode = 300)inner join 的时候where 条件列都可以算作inner join的条件列,无区别
效率上也没有差别