我们应该在加入时检查带有硬编码值的条件吗?
select * from user u
inner join department d on d.id = u.id and d.id =1
where u.id = 1
如果是的话? “内部连接部门d在d.id = u.id和d.id = 1”和“其中u.id = 1”之间有什么不同。 sql server内部发生了什么?
答案 0 :(得分:1)
FROM子句(包括JOINS)在WHERE之前处理。在JOIN中添加硬代码变量时,需要为要处理的WHERE子句创建较小的结果集,从而可能提高性能。
使用count(*)运行查询,并设置JOIN上d.id = 1返回的行数。这是WHERE子句需要考虑的行数。
现在添加条件并再次获取计数。这是(希望能够考虑的行数较少。
但是,请记住,SQL查询优化器非常智能,可以在上面的示例中对简单查询进行一些优化。