繼上我的最後一個問題Sql Server query performance,並發現我的方法在一個搜索查詢中允許可選參數是次優的,是否有人有如何解決這個問題的指導方針?最佳搜索查詢
例如,假設我有一個應用程序表,一個客戶表和一個聯繫人詳細信息表,並且我想創建一個SP,該SP允許在某些姓名,家庭電話,手機和應用程序ID,可以使用類似以下內容:
select *
from application a inner join customer c on a.customerid = a.id
left join contact hp on (c.id = hp.customerid and hp.contacttype = 'homephone')
left join contact mob on (c.id = mob.customerid and mob.contacttype = 'mobile')
where (a.ID = @ID or @ID is null)
and (c.Surname = @Surname or @Surname is null)
and (HP.phonenumber = @Homphone or @Homephone is null)
and (MOB.phonenumber = @Mobile or @Mobile is null)
上面使用的模式是不是真實的,我也不會使用select *在真實的場景中,它是在where子句我感興趣的建設。有沒有更好的方法,無論是動態sql還是可以實現相同結果的替代方法,而不需要很多嵌套條件。一些SP可具有10 - 以這種方式使用
+1:很好的參考文章! – RedFilter 2010-05-07 12:41:49
偉大的文章,我被幾個DBA告知,動態SQL是邪惡的(即使使用sp_executesql),但實際上並沒有研究自己。重寫一些關鍵的查詢來使用這種方法已經有了重大的改進 – Macros 2010-05-09 12:54:59