2011-05-18 10 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條件,但這是推測,並且最好是引擎特定的。