SQL查询中的in与join效率比较

大多数情况下,程序员比较喜欢使用in来查询符合某些条件的数据,最近在查询某个角色有哪些用户的方法中,使用了in语句:

SELECT COUNT(1)
FROM baseuser
WHERE BaseUser.DeletionStateCode = 0
    AND BaseUser.Enabled = 1
    AND BaseUser.IsVisible = 1
    AND BaseUser.Id > 0
    AND BaseUser.Id IN (SELECT UserId
        FROM spysxtUserRole
        WHERE RoleId = '6d989d918dfe428c95e4469f866b1299'
            AND Enabled = 1
            AND DeletionStateCode = 0)

可以看到时间是0.249ms;

一位朋友看到后,建议改为Join,改后的语句:

select count(1) from  baseuser A  left join
(SELECT UserId   
FROM spysxtUserRole 
WHERE RoleId = '6d989d918dfe428c95e4469f866b1299' 
AND Enabled = 1  
AND DeletionStateCode = 0) B on A.Id = B.UserId
where B.UserId is not NULL and A.DeletionStateCode = 0  AND A.Enabled = 1 
AND A.IsVisible = 1  AND A.Id > 0

耗时0.125ms,是用in查询的一半;

查询出的结果都是一样的。

 

可以看出,使用join要比用in写的复杂一些,但是效率确实提高跟多。建议能使用join的尽量改一下。

posted @ 2016-02-16 22:59  三人成虎  阅读(17463)  评论(1编辑  收藏  举报