严格将业务逻辑谓词添加到左连接条件
问题描述:
这是理论/最佳实践请求意见。严格将业务逻辑谓词添加到左连接条件
我已经习惯于查看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子句中不是一个选项。
答
为了这个原因,我总是尽可能多地将条件放入JOIN
声明中,并且在包括Joe Celko的文章在内的许多地方阅读过,这是最佳做法。
JOIN
条件要,因为它们排除被加入到合并的表干脆,其中后的表是基于所述连接条件组合使用WHERE
条款行更快 - 和上,潜在地,一个更大的数据组。在许多情况下,我确信优化器会智能地处理这个问题,并尽可能地应用WHERE条件,但这是推测,并且最好是引擎特定的。
问题是? – 2011-05-19 02:13:52