参考资料
1 oracle中关于in和exists,not in 和 not exists
http://blogold.chinaunix.net/u/32484/showart_270855.html
2 oracle中的exists 和not exists 用法详解
http://hi.baidu.com/qianyiliang/blog/item/54db82c2ca71fe1d0ef477a1.html
3 Oracle select in/exists/not in/not exits
http://blog.csdn.net/adwfcu/archive/2008/11/19/3336468.aspx
总结如下:
1 in 用于 右边表小的情况
2 exists 用于右边表大的情况
3 not exists效率比not in 快
具体介绍
in和exists
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询
如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:
例如:表A(小表),表B(大表)
1:
select * from A where cc in (select cc from B)
效率低,用到了A表上cc列的索引;
select * from A where exists(select cc from B where cc=A.cc)
效率高,用到了B表上cc列的索引。
相反的
2:
select * from B where cc in (select cc from A)
效率高,用到了B表上cc列的索引;
select * from B where exists(select cc from A where cc=B.cc)
效率低,用到了A表上cc列的索引。
not in 和not exists
如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;
而not extsts 的子查询依然能用到表上的索引。
所以无论那个表大,用not exists都比not in要快。
分享到:
相关推荐
IN、EXISTS、NOT IN、NOT EXISTS 是 SQL 中四种常用的条件判断运算符,它们之间的区别主要体现在使用场景、执行效率和语法结构上。 IN IN 是一种条件判断运算符,用于判断某个值是否存在于一个列表中。其基本语法...
### Oracle数据库中Exists与In的使用详解 #### 一、Exists 的使用方法 在Oracle数据库中,`EXISTS` 是一种常用的子查询操作符,用于判断子查询是否有结果返回。如果子查询至少返回一行数据,则 `EXISTS` 表达式的...
在Oracle数据库中,`MINUS`、`IN` 和 `EXISTS` 是三种不同的SQL查询操作符,它们各自用于特定的数据处理场景。了解并熟练掌握这些操作符对于优化查询性能和编写复杂的SQL语句至关重要。 1. **MINUS 操作符** `MINUS...
在Oracle数据库中,`NOT EXISTS` 子句常用于查询中,以排除某些特定条件的记录。然而,它对查询性能的影响可能并不总是直观的,尤其是在涉及到外层查询时。本文将深入探讨`NOT EXISTS`如何影响外层查询,并通过示例...
1. 优化 SQL 语句:避免使用 NOT IN 操作符,推荐使用 NOT EXISTS 或(外连接+判断为空)方案代替;使用 IN 时,将出现最频繁的值放在最前面,出现得最少的放在最后面;使用 EXISTS、NOT EXISTS、IN、LEFT OUTER ...
本文将详细地介绍 Oracle 语句优化的方法和技巧,涵盖多表关联、EXISTS 和 IN 语句的使用、INDEX_JOIN 优化、WHERE 和 HAVING 语句的区别、NOT IN 和 <> 操作符的使用、LIKE 操作符的替代、UNION 操作符的优化、SQL ...
"SQL中IN,NOT IN,EXISTS,NOT EXISTS的用法和差别"是SQL查询的基础。`IN`用于判断某值是否在给定的集合中,`NOT IN`则相反。`EXISTS`和`NOT EXISTS`则更注重子查询的存在与否,而非具体值的比较。例如,`SELECT * ...
NOT IN和NOT EXISTS的情况类似,需要根据具体场景选择合适的方法。 总的来说,这本手册提供了全面的Oracle数据库编程和调优实践指南,对于想要提升数据库性能的专业人士来说,是不可或缺的学习资料。它强调了正确...
14. **使用EXISTS替换IN,用NOT EXISTS替换NOT IN**:EXISTS和NOT EXISTS通常比IN和NOT IN更高效,尤其是在涉及子查询时。 15. **识别低效SQL语句**:监控和分析SQL执行计划,找出执行时间长、资源消耗大的语句进行...
本文详细介绍了Oracle数据库中常用的通配符以及其他相关符号的含义及使用方法。通过这些符号的应用,可以使SQL查询更加灵活多样,有助于提高数据检索的准确性和效率。在实际工作中,掌握并熟练应用这些符号对于高效...
6. 选择EXISTS和NOT EXISTS:在子查询中,使用EXISTS和NOT EXISTS通常比IN和NOT IN更快,特别是当子查询返回大量数据时。NOT IN可能导致全表扫描,而EXISTS和NOT EXISTS则能更好地利用索引。 7. 避免在索引列上使用...
Oracle 高级查询是数据库管理中的一个重要主题,它涉及到对数据进行复杂检索的技巧和方法。在本课程中,你将学习如何利用一系列高级技术来更有效地查询Oracle数据库。 首先,我们要了解什么是子查询。子查询,也...
Oracle SQL编写规范是指在编写SQL语句时的一些基本原则和方法,旨在提高SQL语句的执行效率和可读性。以下是Oracle SQL编写规范的详细解释: 1. 尽量用索引,特别在从大量数据中返回小部分数据时 使用索引可以大大...
Oracle高级SQL学习与练习涵盖了数据库编程中的一系列高级主题,旨在帮助数据库开发者和管理员提高解决复杂问题的能力。在Oracle数据库系统中,高级SQL技能是进行高效数据管理、查询优化和复杂数据处理的基础。 1. ...
3. 子查询:理解嵌套查询的概念,掌握IN、NOT IN、EXISTS、NOT EXISTS等子查询用法。 4. 分区和索引:了解Oracle的分区技术,如何提高查询性能,以及索引的创建、管理和使用。 5. 视图:创建和使用视图以简化复杂...
- 使用`NOT EXISTS`代替`NOT IN`,因为`NOT IN`可能会导致全表扫描。 - 例如,查询部门表中没有员工的部门名称: ```sql SELECT dname, deptno FROM dept WHERE NOT EXISTS (SELECT deptno FROM emp WHERE dept....
本文旨在深入探讨Oracle数据库中通配符与运算符的使用方法,帮助读者更好地理解和掌握这些关键概念。 #### 二、Oracle通配符详解 在Oracle数据库中,通配符主要用于模糊查询,即通过模式匹配来检索符合特定条件的...
15. **EXISTS, IN, NOT EXISTS, NOT IN的比较**:在进行数据检索时,正确使用EXISTS与NOT EXISTS通常比使用IN与NOT IN更高效,尤其是在处理大量数据时。例如: ```sql SELECT * FROM EMP WHERE EMPNO > 0 AND ...
Oracle数据库在应用开发中扮演着至关重要的角色,其性能和安全性直接影响到系统的整体效率和稳定性。以下是从"ORACLE应用性能与安全开发建议50条"中提炼出的关键知识点: 1. **绑定变量**:使用绑定变量可以提高SQL...
本文将深入探讨几种常见的SQL操作符及其优化方法,包括IN、NOT IN、、IS NULL、>、<、LIKE以及UNION等,旨在帮助数据库管理员和开发人员构建更为高效、响应迅速的应用系统。 #### IN操作符:灵活性与性能的平衡 IN...