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的尽量改一下。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值