`
heavenslv
  • 浏览: 82405 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SQL优化 ----- IN 和 EXISTS

阅读更多

有时候会将一列和一系列值相比较。最简单的办法就是在where 子句中使用子查询。在

where 子句中可以使用两种格式的子查询。

第一种格式是使用IN 操作符:

... where column in(select * from ... where ...);

第二种格式是使用EXIST 操作符:

... where exists (select 'X' from ...where ...);

绝大多数人会使用第一种格式,因为它比较容易编写,而实际上第二种格式要远比第

一种格式的效率高。在Oracle 中可以几乎将所有的IN 操作符子查询改写为使用EXISTS 的子查询。

第二种格式中,子查询以‘select 'X'开始。运用EXISTS 子句不管子查询从表中抽取什么数

据它只查看where 子句。这样优化器就不必遍历整个表而仅根据索引就可完成工作(这里假定在where 语句中使用的列存在索引)。相对于IN 子句来说,EXISTS 使用相连子查询,构造起来要比IN 子查询困难一些。

通过使用EXIST,Oracle 系统会首先检查主查询,然后运行子查询直到它找到第一个匹配

项,这就节省了时间。Oracle 系统在执行IN 子查询时,首先执行子查询,并将获得的结果列表存放在在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待子查询执行完毕,存放在临时表中以后再执行主查询。这也就是使用EXISTS 比使用IN 通常查询速度快的原因。同时应尽可能使用NOT EXISTS 来代替NOT IN,尽管二者都使用了NOT(不能使用索引

而降低速度),NOT EXISTS 要比 NOT IN 查询效率更高。

分享到:
评论

相关推荐

    收获,不止SQL优化--抓住SQL的本质

    第1章 全局在胸——用工具对...17.1.3 IN与EXISTS之争 455 17.1.4 总结探讨 457 17.2 误区背后的话题扩展 457 17.2.1 话题扩展之等价与否优先 457 17.2.2 话题扩展之颠覆误区观点 458 17.3 全书完,致读者 461

    SQL复习-EXISTS谓词

    本文将深入探讨EXISTS谓词的工作原理、用法以及其与IN和JOIN操作符的区别。 一、EXISTS谓词的基本概念 EXISTS谓词用于测试一个子查询是否至少返回一行数据,而不是关心返回的具体数据内容。其基本语法结构如下: ...

    sql优化-oracle数据库.ppt

    SQL优化是提升数据库性能的关键技术,主要目标是减少数据操作所需的资源(如I/O和CPU)以及时间,以达到最大数据吞吐量和快速响应。Oracle数据库作为广泛使用的数据库系统,其SQL优化策略至关重要。 1. **优化原则*...

    SQL优化-索引

    ### SQL优化之索引详解 #### 一、SQL概述及分类 SQL,即Structured Query Language,是一种用于管理和处理关系型数据库的标准语言。SQL主要由以下几个部分组成: 1. **数据定义语言(Data Definition Language, ...

    SQL里的EXISTS与IN

    根据给定的信息,本文将详细解析`EXISTS`与`IN`的区别以及如何在SQL优化过程中将`IN`转换为`EXISTS`来提高查询性能。 ### SQL优化需求背景 在系统开发与维护的过程中,经常会出现SQL查询效率低下、响应时间过长等...

    SQL优化-实践 数据库优化 数据库理论

    此外,`IN`操作符会被转换为一系列`OR`操作符,`ANY`和`SOME`操作符会被优化为等价的`OR`表达式或`EXISTS`子查询,而`ALL`操作符则会被转换为`AND`操作符或`NOT EXISTS`子查询。`BETWEEN`操作符会被替换为`>=`和`...

    sql case when exists not exists in not in

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

    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,not Exists.in ,not in效率的说明。

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

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

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

    Oracle 11g-SQL-优化

    以上知识点是Oracle 11g SQL优化的核心内容,它们贯穿于编写高效SQL语句、执行计划选择和调优、以及数据库设计和资源管理等整个优化过程中。通过不断的学习和实践,可以熟练掌握这些知识点,从而有效地提升Oracle...

    SQL中EXISTS与IN

    ### SQL中EXISTS与IN的区别及应用场景 #### EXISTS详解 **定义与原理** - **基本概念**:`EXISTS` 是 SQL 中的一个谓词,用于判断子查询是否有结果返回,而不是关心具体的返回值。它主要关注子查询是否至少有一行...

    sql exists和not exists用法

    ### SQL EXISTS 和 NOT EXISTS 的用法详解 在SQL查询中,`EXISTS`与`NOT EXISTS`是非常实用的子查询操作符,它们主要用于检测是否存在满足一定条件的数据行。相较于`IN`、`NOT IN`等操作,`EXISTS`与`NOT EXISTS`...

    收获不止SQL优化

    第1章 全局在胸——用工具对...17.1.3 IN与EXISTS之争 455 17.1.4 总结探讨 457 17.2 误区背后的话题扩展 457 17.2.1 话题扩展之等价与否优先 457 17.2.2 话题扩展之颠覆误区观点 458 17.3 全书完,致读者 461

    in和exists的区别

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

    数据库SQL优化大总结之 百万级数据库优化方案.pdf

    五、数据库SQL优化之IN和NOT IN操作符 5. IN和NOT IN操作符也要慎用,以免引擎放弃使用索引而进行全表扫描。 六、数据库SQL优化之EXISTS代替IN操作符 6. 使用EXISTS代替IN操作符,可以提高查询效率。 七、数据库...

    关于SQL优化的电子书

    2. **在线资源**:O’Reilly出版社提供的《SQL in a Nutshell》、《SQL Pocket Guide》等书籍,以及官方网站oreilly.com和oreillynet.com,提供了丰富的学习材料和社区讨论,是学习SQL优化的好去处。 3. **培训与...

    《基于Oracle的SQL优化》PDF版本下载.txt

    根据提供的文件信息,本文将对《基于Oracle的SQL优化》这一主题进行深入解析,包括但不限于SQL优化的重要性、Oracle数据库的特点以及具体的SQL优化方法等。 ### SQL优化的重要性 SQL(Structured Query Language)...

Global site tag (gtag.js) - Google Analytics