in 和 exists在查询效率的问题

在海量数据的情况下,这两者在效率方面有何差异?
IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

在许多基于基础表的查询中,为了满足一个条件 ,往往需要对另一个表进行联接。在这种情况下,使用EXISTS(或NOT EXISTS)通常将提高查询的效率
低效:
SELECT * FROM EMP (基础表)
WHERE EMPNO > 0 AND DEPTNO IN (SELECT DEPTNO FROM DEPT WHERE LOC = ‘MELB’)
高效:
SELECT * FROM EMP (基础表)
WHERE EMPNO > 0
AND EXISTS (SELECT ‘X’
FROM DEPT
WHERE DEPT.DEPTNO = EMP.DEPTNO
AND LOC = ‘MELB’)
在子查询中,NOT IN子句将执行一个内部的排序和合并,对子查询中的表执行一个全表遍历,因此是非常低效的。
为了避免使用NOT IN,可以把它改写成外连接(Outer Joins)或者NOT EXISTS。
低效:
SELECT …
FROM EMP
WHERE DEPT_NO NOT IN (SELECT DEPT_NO
FROM DEPT
WHERE DEPT_CAT=’A’)
高效:
SELECT ….
FROM EMP E
WHERE NOT EXISTS (SELECT ‘X’
FROM DEPT D
WHERE D.DEPT_NO = E.DEPT_NO
AND DEPT_CAT = ‘A’)
当提交一个包含对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT。 一般可以考虑用EXIST替换。

EXISTS 使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-12-22
exists 比较好一点

sql中in和exists的区别效率问题 转
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。 如果查询的两个表大小相当,那么用in和exists差别不大。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in ...

sql中in和exists的区别效率问题 转
要分不同情况来看待in和exists的效率。1、A表与B表是一对多的关系(不考虑索引的情况),使用exists语句在查询时效率明显高 2、A表与B表是一对一的时候(不考虑索引的情况),使用exists语句和In语句查询时效率一样高 3、A表与B表是多对多的关系(不考虑索引的情况),使用联接方式(inner join、l...

SqlServer中in和exists的区别效率问题
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:例如:表A(小表),表B(大表)1:select * from A where cc in (select cc from B)效率低,用到了A表上cc...

sql左连接查询哪个方式效率高
1、EXISTS的优点即效率高,可以判断单字段和组合字段,并不受NULL的影响,但其缺点是逻辑稍微复杂;2、IN的好处是逻辑直观简单,缺点是只能判断单字段,并且当NOTIN时效率较低,而且NULL会导致不想要的结果;3、JOIN用在这种场合,JOIN的用途是联接两个表,而不是判断一个表的记录是否在另一个表。

关于oracle中的in和exists的效率问题
单说in和exsist,in的效率较差。原理是什么我也不清楚,用数据库的人都这么说。

MySQL查询语句中的IN 和Exists 对比分析
总结来说,IN在子查询结果集小且内外表都能利用索引时效率更高,而Exists在处理大规模子查询时可能更有效。然而,具体场景下的效率差异还需要根据实际情况综合评估。对于数据集大小与查询时间的关系,初步观察到的可能解释是:条件值越大,查询需要遍历的记录越多,导致时间消耗增加。这还需进一步验证。

MySQL中的EXISTS和IN效率对比
首先,测试外层表为小表时,in和exists的查询效率。然后,测试外层表为大表时,两者效率。测试结果表明,两者效率相差不大。有些小伙伴可能对此表示怀疑,认为只是偶然现象。为解决此疑惑,提供图证。分析显示,两者执行过程一致。对于in和exists的效率比较,不同版本的MySQL存在差异。在8.0版本中,两者...

【PL\/SQL】EXISTS 函数 比 IN 更优
Exist函数的用法,比IN函数在某些场景下更优,主要体现在返回数据的效率和使用范围上。Exist函数在SQL查询中,常被用于在主查询的where筛选语句后,通过子查询实现表间匹配。Exist函数的语法格式为:Exist(查询结果集)。如果子查询返回结果集有记录,则判定为真,否则为假。其逻辑类似于:查询结果集存在则...

sql exist和in的区别及查询效率比较
EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,因为IN不走索引。但要看实际情况具体使用:IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。4、关于EXISTS:EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。EXISTS...

面试官:Mysql中EXISTS与IN的使用有哪些差异
IN子查询在子查询结果集较小的情况下效率较高,因为它能缓存子查询结果集,从而加速主查询的执行。反之,EXISTS子查询则不关心子查询返回的具体数据值,它只关注是否存在匹配的行。一旦找到匹配项,它会立即返回结果,支持“短路”机制,避免不必要的计算,从而在子查询表大但只需验证是否存在对应关系时更...

相似回答