在以下查詢中,僅對title_deed_no
搜索條件才需要連接到表title_deed
,並且未從中選擇任何字段。如果@titleDeedNumber
參數爲null,是否還會執行連接?無論如何,這會對性能產生多大的影響?我試圖替換動態生成的大型醜陋T-SQL字符串,並且只有在提供了值title_deed_no
時纔會添加聯接的代碼。如果不需要,SQL Server 2008會優化聯接嗎?
DECLARE @registrarId nchar(1)
DECLARE @titleDeedNumber nvarchar(50)
SELECT TOP 100
vw.*
FROM ACC.dbo.vw_Property_Nad vw
INNER JOIN title_deed td ON (@titleDeedNumber IS NULL)
OR (td.Prop_ID = vw.prop_id)
WHERE vw.Prop_ID IS NOT NULL
AND Registrar = isnull(@registrarId, vw.Registrar)
AND td.title_deed_no = isnull(@titleDeedNumber, td.title_deed_no)
我試圖examning的執行計劃,但它僅僅是太忙從視圖加入,我寧願反正得到專家的意見。
消除連接時對性能的影響取決於 - 連接代表的總體成本佔多少?爲什麼不做'LEFT OUTER JOIN'並且在ON子句中包含'title_deed_no'檢查而不是'WHERE',而不是'INNER JOIN'?如果計劃太忙,爲什麼不用一個更簡單的視圖或表重建類似的場景? –
如果你沒有加入條件(就像@titleDeedNumber爲NULL時)不會和CROSS JOIN一樣嗎? – Magnus