请教各位Oracle达人一个问题:
为什么在SQL查询时
当父查询返回很多数据或者索引效率过差时
使用in要比exists好呢?
解决方案 »
- [求助]关于OracleCommandBuilder.GetInsertCommand()的问题
- A Database develoter interview test
- 存储过程修改表中多行数据
- 请教:如何将orcal数据库的数据导入到excel
- rank grouping如何使用,小菜问题。
- 行转列,列转行的问题
- Oracle 的安装问题
- 还是提示创建文件错误;
- 請問個位超人:oracle9i 怎樣返回一個記錄集
- ************ORACLE超级难题***********************
- 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啊。