我想用存儲過程編寫一個查詢並使用多個過濾器,但我想避免動態SQL。Sql Server查詢優化
說我的參數可以爲空(@ filter1,@ filter2,@ filter3 ...)。我可能會解決這個問題的一種方法是:
SELECT col1, col2, col3
FROM table
WHERE col1 = ISNULL(@filter1, col1)
AND col2 = ISNULL(@filter2, col2)
AND col3 = ISNULL(@filter3, col3)
如果不是null,則會通過適當的過濾器進行過濾。問題是: 1)這是一種很好的做法嗎? 2)優化器會優化col1 = col1 out還是會影響查詢性能?
性能會很糟糕,因爲有很多可能的組合,查詢計劃不可能被緩存。動態SQL是一個更好的選擇。 – 2010-06-23 20:09:49