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

相关文章

  • SQL Server的彻底卸载与再次安装方式

    SQL Server的彻底卸载与再次安装方式

    这篇文章主要介绍了SQL Server的彻底卸载与再次安装方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • sql中exists的基本用法示例

    sql中exists的基本用法示例

    关于exists的用法,相信很多人都有点迷糊,一开始我也犯迷糊,看了多篇博客和进行多次实验之后,其实理解exists的用法并没有那么困难,下面这篇文章主要给大家介绍了关于sql中exists基本用法的相关资料,需要的朋友可以参考下
    2022-08-08
  • Sql Server 2000删除数据库备份文件

    Sql Server 2000删除数据库备份文件

    Sql Server 2000删除数据库备份文件的语句。
    2009-09-09
  • sqlserver 导出插入脚本代码

    sqlserver 导出插入脚本代码

    工作中经常遇到需要将远程客户数据库中的数据复制到本地来测试,下载整个数据库太大了不值得,用下面的脚本可以按指定表生成Insert脚本,将脚本复制到本地来执行,这样快捷了不少
    2012-01-01
  • SQLSERVER聚集索引和主键(Primary Key)的误区认识

    SQLSERVER聚集索引和主键(Primary Key)的误区认识

    很多人会把Primary Key和聚集索引搞混起来,或者认为这是同一个东西。这个概念是非常错误的,本文将带你理清思路,感兴趣的你可不要错过了哈,或许本文对你有所帮助
    2013-02-02
  • SQL Server索引超出了数组界限的解决方案

    SQL Server索引超出了数组界限的解决方案

    这篇文章主要介绍了SQL Server索引超出了数组界限的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Sql Server datetime问题

    Sql Server datetime问题

    SQL SERVER数据库用datetime类型的时候 需要注意的地方
    2009-03-03
  • 异地远程访问本地SQL Server数据库

    异地远程访问本地SQL Server数据库

    数据库的重要性相信大家都有所了解,作为各种数据的电子资料夹,其中可能包含了各种信息,这篇文章就为大家介绍了如何使用cpolar内网穿透,远程连接和操作SQL Server。
    2023-04-04
  • 在SQL Server中使用ISNULL执行空值判断查询

    在SQL Server中使用ISNULL执行空值判断查询

    这篇文章主要介绍了在SQL Server中使用ISNULL执行空值判断查询,ISNULL的好处是可以直接写在SELECT查询语句中,需要的朋友可以参考下
    2014-08-08
  • SQL查询语句求出用户的连续登陆天数

    SQL查询语句求出用户的连续登陆天数

    这篇文章主要是SQl语句的练习,本文教大家如何用SQL查询语句求出用户的连续登陆天数,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-10-10

最新评论