拼吾爱程序人生

首页 » 数据库编程 » SQL » SQL优化之使用 EXISTS 代替 IN 和 关联查询(inner join)
cobra - 2008-8-5 21:45:00
在使用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] 的这些文章也感兴趣:

批量更改数据库对象所有者nf_ChangeObjectOwner
SQL字符串函数
优化数据库前,问自己10个问题
网络SQL入侵与防范高级篇
使用ODC文档在IE中直接连接SQL数据库
将表数据生成SQL脚本的存储过程
利用MSSQL sp自制未公开的加密函数
启动SQL SERVER时自动执行存储过程
存储过程编写经验和优化措施
利用SQL移动硬盘文件
SQL语言入门教程:第五课 删除数据库表格
Sql语句密码验证的安全漏洞
1
查看完整版本: SQL优化之使用 EXISTS 代替 IN 和 关联查询(inner join)
Modify by pin5i DZNT_ExpandPackage 2.1.3296 2007-2009 pin5i.com
 Total Unique Visitors: