`
simgsg
  • 浏览: 96157 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Oracle select in/exists/not in/not exits

 
阅读更多
<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 goland

    当出现错误提示“$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区别

    SQL 中 IN、EXISTS、NOT IN、NOT EXISTS 的区别 IN、EXISTS、NOT IN、NOT EXISTS 是 SQL 中四种常用的条件判断运算符,它们之间的区别主要体现在使用场景、执行效率和语法结构上。 IN IN 是一种条件判断运算符,...

    Oracle In和exists not in和not exists的比较分析

    在Oracle数据库中,`IN`、`EXISTS`、`NOT IN` 和 `NOT EXISTS` 是四个常用的子查询操作符,它们在SQL查询语句中扮演着不同的角色,且各有其性能特点。以下是对这些操作符的详细分析和比较。 1. `IN` 操作符: `IN` ...

    oracle中exists_和in的效率问题详解

    Oracle 中 EXISTS 和 IN 的效率问题详解 EXISTS 和 IN 都是 Oracle 中的集合操作符,但它们在使用和执行效率上有所不同。本文将深入探讨 EXISTS 和 IN 的使用场景、执行机制和效率问题。 EXISTS 的使用场景和机制 ...

    oracle数据库关于exists使用

    ### Oracle数据库中Exists与In的使用详解 #### 一、Exists 的使用方法 在Oracle数据库中,`EXISTS` 是一种常用的子查询操作符,用于判断子查询是否有结果返回。如果子查询至少返回一行数据,则 `EXISTS` 表达式的...

    sql case when exists not exists in not in

    在SQL查询中,`CASE WHEN`、`EXISTS`、`NOT EXISTS`以及`IN`和`NOT IN`是常用的操作符,它们用于处理复杂的条件判断和数据筛选。这些概念对于理解和编写高效的SQL语句至关重要,尤其是在数据分析和数据库管理中。 `...

    in和exists的区别

    在Oracle数据库中,"IN"和"EXISTS"都是用于查询某个集合的元素是否存在于另一个集合中的关键字。然而,它们在处理数据时的效率和适用场景有所不同,这主要取决于涉及的数据量以及表之间的关联。 首先,让我们来看看...

    简述Oracle中in和exists的不同

    一直以来,大家认为exists比in速度快,其实是不准确的。且看接下来的具体分析:in其实是将外表和内表进行hash join,exists是先对外表进行loop操作,然后每次loop后再对内表进行查询。 如果两张表大小差不多,那么...

    经典SQL查询总结关于Exists,not Exists.in ,not in效率的说明。

    ### 经典SQL查询总结关于Exists, not Exists, IN, not IN 效率的说明 在数据库查询操作中,存在着多种方法来实现相似的功能,但不同的实现方式在性能上可能会有显著差异。本文将深入探讨 SQL 中 `EXISTS`, `NOT ...

    does not exist.解决/root/.Xauthority does not exist

    标题 "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语句优化——in,not in,exists,not exists, left join...on博客所需SQL语句.txt欢迎下载!

    sql语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句

    SQL语句优化之用EXISTS替代IN、用NOT EXISTS替代NOT IN的语句 SQL语句优化是数据库性能优化的重要方面之一。在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下,使用EXISTS...

    NOT EXISTS ⇔ NOT IN ⇒ NOT NULL 问题 结果不一样 疑问 如果等效

    在SQL查询语言中,`NOT EXISTS`、`NOT IN` 和 `NOT NULL` 是三种用于排除特定条件的数据记录的方法。然而,在实际应用中,这三种语法有着不同的应用场景和执行逻辑,有时初学者可能会误以为它们是等效的,但实际上...

    MySQL中的in,exists,not in,not exists查询过程对比及结论

    MySQL优化之in,exists,not in,not exists的区别in与existsin查询过程结论:exists查询过程:结论:not in与not existsnot in查询过程:结论:not exists查询过程:结论: 首先我们使用两个用户表作为实例 insert ...

    EXISTS_和_NOT_EXISTS

    - 效率:在某些情况下,`EXISTS` 和 `NOT EXISTS` 可能会提供相似的性能,但通常 `IN` 和 `NOT IN` 比较操作符在处理大量数据时更有效。然而,当涉及到子查询时,`EXISTS` 和 `NOT EXISTS` 可能更合适,因为它们只...

    Oracle: minus | in | exists

    在Oracle数据库中,`MINUS`、`IN` 和 `EXISTS` 是三种不同的SQL查询操作符,它们各自用于特定的数据处理场景。了解并熟练掌握这些操作符对于优化查询性能和编写复杂的SQL语句至关重要。 1. **MINUS 操作符** `MINUS...

    in exist not_in

    IN、EXISTS、NOT EXISTS、NOT IN 在 SQL 语句中的应用和区别 IN 语句和 EXISTS 语句都是 SQL 语句中用来判断是否存在某个值的语句,但是它们的实现机制和应用场景是不同的。 IN 语句是通过 hash 连接来实现的,它...

    in和exists性能解析

    本文将深入解析Oracle中`IN`与`EXISTS`的性能差异,以及如何根据具体需求选择最合适的查询方式。 ### IN子句 `IN`子句主要用于比较一个表达式是否存在于另一个子查询的结果集中。当使用`IN`子句时,数据库引擎会...

    exists 和 not exists的详细解释

    exists 和 not exists的详细解释

Global site tag (gtag.js) - Google Analytics