2011-10-10 19 views

回答

3

或者,你可以用

select  a.PKID 
from  Alerts a 
where  ISNULL(@bitActive, a.Active) = a.Active 

這走的是基本相同,前面的答案,但在哪裏使用或者避免。

我要指出,你可能會使用當前的代碼獲得更好的性能,因爲它避免了執行IS上的每一行NULL測試。如果你正在使用你的數據的索引,IS NULL測試可能意味着你的數據庫引擎的查詢優化器不能使用可能產生一個次優的執行路徑索引。

我可以通過使用IF語句或動態SQL除去該ISNULL檢查和編寫SQL是具體的參數,我們已經看到顯著改善(分鐘到秒)的經驗告訴你。

我們使用SQL Server 2008,因此,如果您使用其他引擎的里程可能會有所不同。我建議你做一些測試,看看你的數據庫是否有任何性能問題。

乾杯, 院長。

+3

在SQL Server 2008上,'OPTION(RECOMPILE)'可以幫助'@bitActive IS NULL OR a.Active = @ bitActive'模式,但不能'ISNULL(@bitActive,a.Active)= a.Active' [正如這裏討論的](http://www.sommarskog.se/dyn-search-2008.html) –

1
select  a.PKID 
from  Alerts a 
where  @bitActive IS NULL OR a.Active = @bitActive