2011-05-18 54 views
0

这是理论/最佳实践请求意见。严格将业务逻辑谓词添加到左连接条件

我已经习惯于查看WHERE子句和JOIN条件作为“托管”任何业务逻辑的好地方,这些业务逻辑将使我的查询尽可能精确。

但引起我的注意的是,将不相关的业务逻辑添加为JOIN条件可能会违反“最佳实践”。例如:

  SELECT a.Id, b.Id 
      FROM foo AS a 
LEFT OUTER JOIN bar AS b ON a.Id = b.Id 
         AND GETDATE() >= "18/5/2011" 

的例子是一个有点天真:在现实生活中真的是由主叫方所要求的附加条件,并没有它实际上会产生不真实的结果(即主叫方将在代码进行筛选) 。

请注意,对于OUTER连接,当逻辑指定它时,将条件放在WHERE子句中不是一个选项。

+1

问题是? – 2011-05-19 02:13:52

回答

0

为了这个原因,我总是尽可能多地将条件放入JOIN声明中,并且在包括Joe Celko的文章在内的许多地方阅读过,这是最佳做法。

JOIN条件要,因为它们排除被加入到合并的表干脆,其中后的表是基于所述连接条件组合使用WHERE条款行更快 - 和上,潜在地,一个更大的数据组。在许多情况下,我确信优化器会智能地处理这个问题,并尽可能地应用WHERE条件,但这是推测,并且最好是引擎特定的。