条件检查与连接上的硬代码值之间的区别和在哪里?

时间:2014-12-23 13:52:15

标签: sql-server

我们应该在加入时检查带有硬编码值的条件吗?

     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内部发生了什么?

1 个答案:

答案 0 :(得分:1)

FROM子句(包括JOINS)在WHERE之前处理。在JOIN中添加硬代码变量时,需要为要处理的WHERE子句创建较小的结果集,从而可能提高性能。

使用count(*)运行查询,并设置JOIN上d.id = 1返回的行数。这是WHERE子句需要考虑的行数。

现在添加条件并再次获取计数。这是(希望能够考虑的行数较少。

但是,请记住,SQL查询优化器非常智能,可以在上面的示例中对简单查询进行一些优化。