首页 > 数据库技术 > 详细

NOT IN、NOT EXISTS的相关子查询改用LEFT JOIN--sql2000性能优化

时间:2016-07-08 18:09:00      阅读:213      评论:0      收藏:0      [点我收藏+]
参考文章:SQL SERVER性能优化综述(很好的总结,不要错过哦)

数据库:系统数据库

子查询的用法


         子查询是一个 SELECT 查询,它嵌套在 SELECT、INSERT、UPDATE、DELETE 语句或其它子查询中。任何允许使用表达式的地方都可以使用子查询。子查询可以使我们的编程灵活多样,可以用来实现一些特殊的功能。但是在性能上,往往一个不合适的子查询用法会形成一个性能瓶颈。
          如果子查询的条件中使用了其外层的表的字段,这种子查询就叫作相关子查询。相关子查询可以用IN、NOT IN、EXISTS、NOT EXISTS引入。 关于相关子查询,应该注意:


(1)NOT IN的相关子查询可以改用LEFT JOIN代替写法。比如:

SELECT PUB_NAME FROM PUBLISHERS 
WHERE PUB_ID NOT IN (SELECT PUB_ID 
FROM TITLES 
WHERE TYPE = ‘BUSINESS‘) 

技术分享

我们用左外连接语句对上面的语句进行替换,先看下面的语句,PUBLISHERS 表与TITLES表进行左外连接

SELECT A.PUB_NAME,B.pub_id FROM PUBLISHERS A LEFT JOIN TITLES B 
ON B.TYPE = ‘BUSINESS‘ AND A.PUB_ID=B. PUB_ID 

技术分享

根据要求,我们只要查询出上面pub_id为空的就行,对语句进行如下改进:

技术分享

 

(2)NOT EXISTS的相关子查询可以改用LEFT JOIN代替写法。比如:

技术分享



NOT IN、NOT EXISTS的相关子查询改用LEFT JOIN--sql2000性能优化

原文:http://www.cnblogs.com/firstdream/p/5654009.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!