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;spa

一位朋友看到後,建議改成Join,改後的語句:code

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查詢的一半;blog

查詢出的結果都是同樣的。io

 

能夠看出,使用join要比用in寫的複雜一些,可是效率確實提升跟多。建議能使用join的儘可能改一下。class

相關文章
相關標籤/搜索