请教各位Oracle达人一个问题:
为什么在SQL查询时
当父查询返回很多数据或者索引效率过差时
使用in要比exists好呢?
解决方案 »
- oracle数据库同步问题
- 一行变多行
- 关于表关联批量更新。
- oracle启动和sqlplus问题
- 求SQL,两张表,A表列名是代码,B表记录A表列名码和A表列名汉字,怎么把A表列名以汉字方式显示出来?
- 请问在Oracle中如何设置像SQL Server中插入一行字段值会自动加1的字段,谢谢
- .net与oracle 9i连接问题,急!
- 一个关于表中记录的输出问题。请帮忙!
- 能不能在一个SQL的删除语句中同时对两个表进行删除?
- 请问oracle中文字库的问题 ,ZHS16CGB231280与ZHS16GBK关系, 谢谢!!!
- oracle10g rac安装出现Unable to load module "oracleasm"的问题!
- 求分析函数lead与lag用法例子
可以自己写个SQL测试下,看下执行计划里的cost 就知道了,cost 越小,执行越快。 不过用exist 要比in 效率高。
用EXISTS替代IN、用NOT EXISTS替代NOT IN:
在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率. 在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历). 为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS.
例子:
(高效)SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND EXISTS (SELECT ‘X' FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = ‘MELB')
(低效)SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND DEPTNO IN(SELECT DEPTNO FROM DEPT WHERE LOC = ‘MELB')
Oracle SQL的优化:
http://blog.csdn.net/tianlesoftware/archive/2009/10/15/4672023.aspx
------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
网上资源: http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
Q Q 群:62697716
那是因为在这种情况下,oracle走的是表扫描机制 即使table scpan啊。