<p>in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。 <br>一直以来认为exists比in效率高的说法是不准确的。 <br>如果查询的两个表大小相当,那么用in和exists差别不大。 <br>in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。 <br>一直以来认为exists比in效率高的说法是不准确的。 <br>如果查询的两个表大小相当,那么用in和exists差别不大。 </p> <p>如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in: </p> <p>例如:表A(小表),表B(大表) <br>1: <br>select * from A where cc in (select cc from B) <br>效率低,用到了A表上cc列的索引; <br>select * from A where exists(select cc from B where cc=A.cc) <br>效率高,用到了B表上cc列的索引。 <br>相反的 <br>2: <br>select * from B where cc in (select cc from A) <br>效率高,用到了B表上cc列的索引; <br>select * from B where exists(select cc from A where cc=B.cc) <br>效率低,用到了A表上cc列的索引。 <br>not in 和not exists <br>如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引; <br>而not extsts 的子查询依然能用到表上的索引。 <br>所以无论那个表大,用not exists都比not in要快。 </p> <p>in 与 =的区别 </p> <p>select name from student where name in ('zhang','wang','li','zhao'); </p> <p>与 </p> <p>select name from student where name='zhang' or name='li' or name='wang' or name='zhao' </p> <p>的结果是相同的。 <br>-----------------------------------------------------------------实例 <br>--登陆gather/123456@pc150 执行以下语句,注意执行时间 <br>---小表 <br>er_street_code <br>select distinct tt.gkdm from er_street_code tt where tt.gkdm is not null <br>---大表 <br>er_in_detail,er_reck_detail </p> <p>---例1 <br>select * from er_reck_detail t1 where t1.gkdm in (select gg.gkdm from er_street_code gg) </p> <p>select * from er_reck_detail t1 where exists (select * from er_street_code gg where t1.gkdm=gg.gkdm) </p> <p>---例2 <br>select * from er_street_code aa where aa.gkdm in (select mm.gkdm from er_reck_detail mm) </p> <p>select * from er_street_code aa where exists (select * from er_reck_detail mm where mm.gkdm=aa.gkdm) </p> <p>---例3 <br>select * from er_reck_detail t1 where t1.gkdm in (select t2.gkdm from er_in_detail t2) </p> <p>select * from er_reck_detail t1 where exists (select * from er_in_detail t2 where t1.gkdm=t2.gkdm) <br>本篇文章来源于:开发学院 <a href="http://edu.codepub.com">http://edu.codepub.com</a> 原文链接:http://edu.codepub.com/2009/0721/10539.php</p>
分享到:
相关推荐
当出现错误提示“$GOPATH/go.mod exists but should not”时,这意味着Go编译器或IDE(如Goland)检测到在`GOPATH`目录下存在`go.mod`文件,而这种情况通常是不被推荐的。在Go 1.11及更高版本中,引入了Go Modules...
SQL 中 IN、EXISTS、NOT IN、NOT EXISTS 的区别 IN、EXISTS、NOT IN、NOT EXISTS 是 SQL 中四种常用的条件判断运算符,它们之间的区别主要体现在使用场景、执行效率和语法结构上。 IN IN 是一种条件判断运算符,...
在Oracle数据库中,`IN`、`EXISTS`、`NOT IN` 和 `NOT EXISTS` 是四个常用的子查询操作符,它们在SQL查询语句中扮演着不同的角色,且各有其性能特点。以下是对这些操作符的详细分析和比较。 1. `IN` 操作符: `IN` ...
Oracle 中 EXISTS 和 IN 的效率问题详解 EXISTS 和 IN 都是 Oracle 中的集合操作符,但它们在使用和执行效率上有所不同。本文将深入探讨 EXISTS 和 IN 的使用场景、执行机制和效率问题。 EXISTS 的使用场景和机制 ...
### Oracle数据库中Exists与In的使用详解 #### 一、Exists 的使用方法 在Oracle数据库中,`EXISTS` 是一种常用的子查询操作符,用于判断子查询是否有结果返回。如果子查询至少返回一行数据,则 `EXISTS` 表达式的...
在SQL查询中,`CASE WHEN`、`EXISTS`、`NOT EXISTS`以及`IN`和`NOT IN`是常用的操作符,它们用于处理复杂的条件判断和数据筛选。这些概念对于理解和编写高效的SQL语句至关重要,尤其是在数据分析和数据库管理中。 `...
在Oracle数据库中,"IN"和"EXISTS"都是用于查询某个集合的元素是否存在于另一个集合中的关键字。然而,它们在处理数据时的效率和适用场景有所不同,这主要取决于涉及的数据量以及表之间的关联。 首先,让我们来看看...
一直以来,大家认为exists比in速度快,其实是不准确的。且看接下来的具体分析:in其实是将外表和内表进行hash join,exists是先对外表进行loop操作,然后每次loop后再对内表进行查询。 如果两张表大小差不多,那么...
### 经典SQL查询总结关于Exists, not Exists, IN, not IN 效率的说明 在数据库查询操作中,存在着多种方法来实现相似的功能,但不同的实现方式在性能上可能会有显著差异。本文将深入探讨 SQL 中 `EXISTS`, `NOT ...
标题 "does not exist. 解决 /root/.Xauthority does not exist" 涉及到的是一个常见的 Linux 系统问题,通常在使用图形界面(如 X Window System)或通过 SSH 远程连接时遇到。这个问题指出,系统找不到 `/root/....
SQL语句优化——in,not in,exists,not exists, left join...on博客所需SQL语句.txt欢迎下载!
SQL语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句 SQL语句优化是数据库性能优化的重要方面之一。在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下,使用EXISTS...
在SQL查询语言中,`NOT EXISTS`、`NOT IN` 和 `NOT NULL` 是三种用于排除特定条件的数据记录的方法。然而,在实际应用中,这三种语法有着不同的应用场景和执行逻辑,有时初学者可能会误以为它们是等效的,但实际上...
MySQL优化之in,exists,not in,not exists的区别in与existsin查询过程结论:exists查询过程:结论:not in与not existsnot in查询过程:结论:not exists查询过程:结论: 首先我们使用两个用户表作为实例 insert ...
- 效率:在某些情况下,`EXISTS` 和 `NOT EXISTS` 可能会提供相似的性能,但通常 `IN` 和 `NOT IN` 比较操作符在处理大量数据时更有效。然而,当涉及到子查询时,`EXISTS` 和 `NOT EXISTS` 可能更合适,因为它们只...
在Oracle数据库中,`MINUS`、`IN` 和 `EXISTS` 是三种不同的SQL查询操作符,它们各自用于特定的数据处理场景。了解并熟练掌握这些操作符对于优化查询性能和编写复杂的SQL语句至关重要。 1. **MINUS 操作符** `MINUS...
IN、EXISTS、NOT EXISTS、NOT IN 在 SQL 语句中的应用和区别 IN 语句和 EXISTS 语句都是 SQL 语句中用来判断是否存在某个值的语句,但是它们的实现机制和应用场景是不同的。 IN 语句是通过 hash 连接来实现的,它...
本文将深入解析Oracle中`IN`与`EXISTS`的性能差异,以及如何根据具体需求选择最合适的查询方式。 ### IN子句 `IN`子句主要用于比较一个表达式是否存在于另一个子查询的结果集中。当使用`IN`子句时,数据库引擎会...
exists 和 not exists的详细解释