SQL优化之使用 EXISTS 代替 IN 和 关联查询(inner join)

在使用Exists时,如果能正确使用,有时会提高查询速度:

      1,使用Exists代替inner join

      2,使用Exists代替 in



  1,使用Exists代替inner join例子:
    在一般写sql语句时通常会遇到如下语句:

      两个表连接时,取一个表的数据,一般的写法通过关联查询(inner join):

Code


查询结果:

Code


还有一种写法使用exists来取数据

Code


执行结果:

Code


这里两着的IO次数,EXISTS比inner join少 2个IO, 对比执行计划成本不一样, 看看两着的差异: 


 附件: 您所在的用户组无法下载或查看附件

  这时我们发现使用EXISTS要比inner join效率稍微高一下。 
    2,使用Exists代替 in
      要求:编写workflowbase表中id不在表中dbo.[[zping.com]]]的行:     

      一般的写法:

Code


执行结果:

Code


使用Existsl来写:

Code


看看执行结果

Code


18984+1589=20573次  (使用Exists)

  使用exists是in的2.8倍,查询性能提高很大。

  EXISTS 使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果。


(文/zping  出处/博客园)

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [SQL] 的这些文章也感兴趣:

数据库正规化和设计技巧(1)
SQL 性能优化(SQL Performance Tuning)
整理的一些常用系统表
数据库开发的持续集成 - Liquibase的简介和应用
用SQLJ开发数据库
asp读sql数据时出现乱码问题的解决方法
数据访问-与数据库建立连接
XML、T-SQL 和 CLR 携手开创数据库编程新天地
IBatis.Net使用方法之十二:在IBatis.Net中调用存储过程
理解.NET中的数据库连接池