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

来源:互联网 发布:松下plc编程软件序列号 编辑:程序博客网 时间:2024/05/19 17:24

参考文章: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代替写法。比如:




 

0 0
原创粉丝点击