大多數狀況下,程序員比較喜歡使用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