为了账号安全,请及时绑定邮箱和手机立即绑定

使用JOIN时WHERE子句vs ON

使用JOIN时WHERE子句vs ON

森林海 2019-12-04 09:40:23
假设我具有以下T-SQL代码:SELECT * FROM Foo fINNER JOIN Bar b ON b.BarId = f.BarId;WHERE b.IsApproved = 1;以下代码也返回相同的行集:SELECT * FROM Foo fINNER JOIN Bar b ON (b.IsApproved = 1) AND (b.BarId = f.BarId);这可能不是最好的示例,但是两者之间在性能上有什么不同吗?
查看完整描述

3 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

不,查询优化器足够聪明,可以为两个示例选择相同的执行计划。

您可以SHOWPLAN用来检查执行计划。


但是,您应该将所有联接连接放在该ON子句上,并将所有限制放在该WHERE子句上。


查看完整回答
反对 回复 2019-12-04
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

SELECT * FROM Foo f

INNER JOIN Bar b ON b.BarId = f.BarId

WHERE b.IsApproved = 1;

这是更好的选择。它易于阅读和修改。在商业世界中,这就是您想要的。就性能而言,它们是相同的。


查看完整回答
反对 回复 2019-12-04
  • 3 回答
  • 0 关注
  • 534 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信