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

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



我要查询 Sendorder表中的冗余数据(没有和reg_person或worksite相连的数据)

sql="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毫秒

sql="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效率高多了 

相关文章

  • SQL2008 详解直接将XML存入到SQL中

    SQL2008 详解直接将XML存入到SQL中

    这篇文章主要介绍了SQL2008 详解直接将XML存入到SQL中的相关资料,需要的朋友可以参考下
    2017-01-01
  • SQLServer中MERGE语句的使用

    SQLServer中MERGE语句的使用

    MERGE语句用于根据两个表之间的条件来插入、更新或删除记录,本文主要介绍了SQLServer中MERGE语句的使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • sql 数据库还原图文教程

    sql 数据库还原图文教程

    一些网友询问怎么调试MSSQL数据库的程序,开始简单说了下,但怕大家不明白,还是做了个图片版的说明,希望大家能看懂。
    2009-05-05
  • Mysql中悲观锁与乐观锁应用介绍

    Mysql中悲观锁与乐观锁应用介绍

    乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生活中悲观的人总是想着事情往坏的方向发展.这两种人各有优缺点,不能不以场景而定说一种人好于另外一种人,文中详细介绍了悲观锁与乐观锁,需要的朋友可以参考下
    2022-08-08
  • SqlServer数据库全角转换成半角

    SqlServer数据库全角转换成半角

    SqlServer数据库全角转换成半角,需要的朋友可以参考一下
    2013-03-03
  • SQL Server误区30日谈 第23天 有关锁升级的误区

    SQL Server误区30日谈 第23天 有关锁升级的误区

    在SQL Server 2005和之前的版本,页锁会直接升级到表锁。在SQL Server 2005或SQL Server 2008,你可以通过如下跟踪标志改变锁升级的行为
    2013-01-01
  • SQL SERVER 中构建执行动态SQL语句的方法

    SQL SERVER 中构建执行动态SQL语句的方法

    这篇文章主要介绍了SQL SERVER 中构建执行动态SQL语句的方法,需要的朋友可以参考下
    2017-06-06
  • 解锁 SQL Server 2022的时间序列数据功能(示例详解)

    解锁 SQL Server 2022的时间序列数据功能(示例详解)

    SQL Server2022在处理时间序列数据时,SQL Server 提供了一些优化和功能,比如 DATE_BUCKET 函数、窗口函数以及其他时间日期函数,以便更高效地处理时间序列数据,这篇文章主要介绍了解锁 SQL Server 2022的时间序列数据功能,需要的朋友可以参考下
    2024-08-08
  • MSSQL自动重建出现碎片的索引的方法分享

    MSSQL自动重建出现碎片的索引的方法分享

    无论何时对基础数据执行插入、更新或删除操作,SQL Server 数据库引擎都会自动维护索引。随着时间的推移,这些修改可能会导致索引中的信息分散在数据库中(含有碎片)。当索引包含的页中的逻辑排序(基于键值)与数据文件中的物理排序不匹配时,就存在碎片。碎片非常多的索引可能会降低查询性能,导致应用程序响应缓慢。
    2014-06-06
  • 记一次成功的sql注入入侵检测附带sql性能优化

    记一次成功的sql注入入侵检测附带sql性能优化

    很多同学和园友都遇到过sql注入的,其中大部分都是代码的不严谨造成的,都是犯过很多错误才学会认真起来
    2011-09-09

最新评论