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

SQL语句优化--用EXISTS替代IN、用NOT EXISTS替代NOT IN

SQL 
阅读更多

在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率。在子查询中,NOT IN子句将执行一个内部的排序和合并。无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历)。为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS。

如:
我要查询 Sendorder表中的冗余数据(没有和reg_person或worksite相连的数据)
select Sendorder.id,Sendorder.reads,Sendorder.addtime

from Sendorder

where Sendorder.person_id not in(select user_id from reg_person )

       or Sendorder.worksite_id not in(select id from worksite)

order by Sendorder.addtime desc

程序执行时间:40109.38毫秒

 

select Sendorder.id,Sendorder.reads,Sendorder.addtime
from Sendorder
where not EXISTS (SELECT id FROM reg_person where reg_person.user_id=Sendorder.person_id)
       or not EXISTS (SELECT id FROM worksite where worksite.id=Sendorder.worksite_id)
order by Sendorder.addtime desc

程序执行时间:8531.25毫秒

很明显使用not EXISTS效率高多了

3
0
分享到:
评论

相关推荐

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

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

    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语句优化——in,not in,exists,not exists, left join...on博客所需SQL语句2.txt

    SQL语句优化——in,not in,exists,not exists, left join...on博客所需SQL语句2.txt,欢迎下载!

    sql case when exists not exists in not in

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

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

    - 在某些情况下,可以考虑使用 `EXISTS` 或 `NOT EXISTS` 来替代 `IN` 和 `NOT IN`,以提高查询效率。 #### 三、左连接、右连接与全连接 除了上述几种查询方式之外,SQL 还提供了不同的连接类型来处理不同情况下...

    sql in,exists,not in,not exists区别

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

    SQLServer 优化SQL语句 in 和not in的替代方案

    对于`IN`和`NOT IN`,应尽可能使用`JOIN`、`EXISTS`或结合空值判断的替代方法,以充分利用索引并减少不必要的计算步骤,从而提高查询速度和系统整体性能。在编写SQL时,不仅要考虑语句的可读性和简洁性,还要兼顾...

    JAVA-SQL语句优化.doc

    此外,外部联接操作符`+`的使用也是一种优化策略,它可以替代效率低下的`NOT IN`操作。例如,通过将`NOT IN`查询转换为左联接查询,可以显著提高查询速度,尤其是在处理大型数据时。 最后,注意在复杂的查询中,...

    一般SQL语句优化整理

    - 如果确实需要使用不等于运算符,考虑使用`NOT IN`、`NOT EXISTS`等替代方案。 ### 5. 使用INNER JOIN代替IN子句 - **场景**:在连接两个表时,使用`IN`子句可能会导致性能下降。 - **优化建议**: - 考虑使用`...

    非常好用的SQL语句优化34条+sql语句基础

    在SQL编程领域,掌握高效的SQL语句优化技巧和基础知识是至关重要的。以下是对"非常好用的SQL语句优化34条+sql语句基础"这一主题的详细解析: 1. **索引优化**:索引是提高查询速度的关键。创建合适的索引(主键、...

    SQL语句大全--实用

    10. **基本的SQL语句**: - `SELECT`用于查询数据,可以结合`WHERE`子句过滤结果。 - `INSERT INTO`用于向表中插入新记录。 - `DELETE FROM`用于删除符合特定条件的记录。 - `UPDATE`用于修改表中的记录。 - `...

    Sql语句优化(很好的资料)

    - 使用IN操作符虽然使得SQL语句更易读,但其性能通常较低。Oracle会尝试将其转化为多表连接,但复杂查询可能无法转换,导致额外的处理步骤。建议在性能敏感的SQL中避免使用IN。 2. **NOT IN操作符**: - 应避免...

    sql语句的优化

    可以考虑使用BETWEEN来代替连续数值范围的IN操作,或者使用EXISTS来替代NOT IN,以提高效率。 6. **LIKE操作符的优化**:当LIKE操作符用于模糊匹配时,如果通配符位于开头(如'%abc%'),则可能导致全表扫描。这种...

    SQL Exists语句的使用

    在SQL查询语句中,Exists语句的使用方式

    Oracle SQL语句优化技术分析

    - 使用`NOT EXISTS`或者结合外连接加空值判断的方式来替代`NOT IN`,以提高查询效率。 #### <> (不等于)操作符优化 **特点与限制** - `<>`操作符(不等于)通常不会使用索引,这意味着处理此类操作时,Oracle可能会...

    Oracle——sql语句优化

    ### Oracle SQL语句优化策略详解 #### 操作符优化概览 在Oracle数据库环境中,SQL语句的优化是提升查询效率、减少系统资源消耗的关键环节。通过对特定操作符的合理运用,可以显著改善数据检索的速度与准确性。本文...

    SQL语句优化技术分析

    使用`IN`操作符编写的SQL语句虽然易于理解和编写,但在性能上往往不如其他方法。Oracle会尝试将`IN`操作符转化为多表连接,若转化失败,则需先执行子查询,再查询外部表记录,增加了额外的处理步骤。对于包含分组...

    sql语句优化技术分析

    SQL语句优化是数据库管理中的核心技能之一,它关乎到系统的性能、响应时间和资源利用率。在处理大量数据时,有效的SQL优化策略能显著提升数据库应用的效率。以下是对SQL语句优化技术的详细分析: 一、理解执行计划 ...

    orcale-SQL语句优化大全

    - NOT IN操作符不利用索引,建议使用NOT EXISTS或外连接结合空值判断来替代。例如,`NOT IN (subquery)`可以改为`NOT EXISTS (SELECT 1 FROM ... WHERE ...)`。 3. **谨慎使用操作符**: - 不等于操作符不使用...

Global site tag (gtag.js) - Google Analytics