Oracle中 IN 和 EXISTS 的性能区别和使用注意事项
2014-04-04 17:13
489 查看
1.对于IN 和 EXISTS 的性能区别:
(1). select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;
T1数据量小而T2数据量非常大时,T1<<T2 时,(1)的查询效率高。
(2). select * from T1 where T1.a in (select T2.a from T2) ;
T1数据量非常大而T2数据量小时,T1>>T2 时, (2) 的查询效率高。
即,如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in,反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。
2.NOT IN 与NOT EXISTS:
NOT EXISTS 与 NOT IN 不能完全互相替换,看具体的需求。如果选择的列可以为空,则不能被替换。
本文出自 “有梦就有希望” 博客,请务必保留此出处http://mengzhengbin520.blog.51cto.com/7590564/1390711
(1). select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;
T1数据量小而T2数据量非常大时,T1<<T2 时,(1)的查询效率高。
(2). select * from T1 where T1.a in (select T2.a from T2) ;
T1数据量非常大而T2数据量小时,T1>>T2 时, (2) 的查询效率高。
即,如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in,反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。
2.NOT IN 与NOT EXISTS:
NOT EXISTS 与 NOT IN 不能完全互相替换,看具体的需求。如果选择的列可以为空,则不能被替换。
本文出自 “有梦就有希望” 博客,请务必保留此出处http://mengzhengbin520.blog.51cto.com/7590564/1390711
相关文章推荐
- 32位和64位C++程序使用ADO访问ORACLE注意事项和区别
- Oracle中的EXISTS与IN使用区别
- 在hibernate中使用Oracle序列注意事项
- Oracle rebuild index 使用 parallel 时 与 并行度 的注意事项
- Oracle exists 和 in 的真正区别
- 第一篇!in和exists性能比较和使用
- lucene.net 使用过程中的 几个注意事项(含termquery 和QueryParser 的区别)
- 使用find_in_set()函数的注意事项
- oracle 使用rownum分页及注意事项
- ORACLE IN 与NOT IN 的性能区别
- Oracle8的OCI函数中参数使用的注意事项
- 如何不用oracle client直接使用plsql远程连接oracle数据库以及需要注意的事项
- GetComponentInChildren方法的使用注意事项
- oracle rowid 使用注意事项
- Oracle中exists与in区别
- exists与in的使用与区别
- 免安装Oracle客户端使用PL/SQL连接Linux Oracle 注意事项
- Oracle rebuild index 使用 parallel 时 与 并行度 的注意事项
- SQL使用经验 IN 还是 EXISTS的选用,哪个性能更好
- openSessionInView的使用及注意事项