回答
如果你需要使用它,那麼ISNULL和COALESCE一樣或CASE的替代品之間的差異是微不足道的。不用擔心
任何差異都來自於數據類型的處理方式。 COALESCE/CASE可以添加隱式數據類型轉換,而ISNULL則有更簡單的規則。
編輯
ISNULL在SELECT列表打壓NULLS是微不足道的。主要工作將在處理行和數據時完成。額外的ISNULL將無法衡量:請勿optimise prematurely
因爲它已經提到的已經這取決於在您的查詢中如何以及在哪裏使用它。可能你可能想要顯示你在查詢中使用它的方式。
此外,我建議你到過這 - What makes a SQL statement sargable?
這取決於你如何期運用它,但你在這兩種情況下can build execution plans(與ISNULL()和沒有它),並比較結果。
select-clause中的ISNULL()對性能有着可忽略的影響。 另一方面,where子句可能會對性能產生非常巨大的影響,因爲它會阻止優化器在該列上使用索引。
where isnull(col1, 0) = 0 -- unable to use index, because every
-- row has to be evaluated
where col1 = isnull(@myVar, 0) -- index will be used, since isnull(@myVar, 0)
-- returns the same static value for every row and
-- not every row has to be evaluated by the function.
因此,當在where子句中使用isnull()時,評估它是否阻止查詢優化器使用索引。如果是這樣,請考慮創建一個帶有結果的計算列,如果isnull(col1,0)並索引計算列並在where子句中使用它。
請注意,這兩個條件不會給出相同的結果。 – Atario
避免在where子句中使用isNull。請參閱This article。
嘿那裏 - 這個問題已經有了一個可以接受的答案。這是很好的信息,但作爲評論會更好:) – landons
我沒有得到那篇文章。它正在看裸體列。 Isnull(@someVar,0)不應該很貴。 Isnull(someColumn,0)可能很昂貴,如果這樣做不會使用索引。 –
雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/18966014) – derloopkat
是有性能問題據我所知,在SQL Server 2012工作室
的問題是很明顯的,當我在組合使用ISNULL
與OVER
。在優化之後(即將ISNULL
放入子查詢中,我使用OVER
)運行時間從(估計的)25.2小時減少到102秒。
我的猜測是ISNULL
可以在整個列上運行(例如,在普通的ol'SELECT
)中。但是,當您使用OVER
運行時,它每次都會被重新調用,從而拖慢性能。
尚未準備好進一步鑽取。簡單地把它放在這裏供他人蔘考。
- 1. SQL存儲過程;使用ISNULL(db1.value,db2.value)性能問題
- 2. 在Windows 2008R2上使用SQL Server AlwaysOn可用性組是否存在問題?
- 3. 使用雜注包(1)時是否存在性能問題?
- 4. 「return await」是否存在性能問題?
- 5. 在ListBoxItem.ContentTemplate中使用ContentPresenter是否存在任何問題?
- 6. SQL Server 2012性能問題使用FULLTEXT
- 7. 在SQL Server中執行ISNULL
- 8. SQL Server - 存儲過程性能問題
- 9. SQL Server存儲過程性能問題
- 10. 在SQL SERVER 2005上啓用CLR是否存在安全問題?
- 11. 檢查mySQL中是否存在記錄時的性能問題?
- 12. SQL Server 2012性能問題
- 13. SQL Server性能問題
- 14. SQL Server 2005性能問題
- 15. SQL Server性能問題
- 16. SQL Server 2008性能問題
- 17. 使用Flask-Bootstrap是否有任何類型的性能問題?
- 18. Spring集成 - 通用Webservice出站網關,是否存在任何性能問題?
- 19. SQL Server 2005高內存使用率和性能問題
- 20. 使用require導入dust.js是否存在任何已知問題?
- 21. Android:使用IMSI是否存在任何問題
- 22. 在Java中使用大量對象是否存在性能問題
- 23. SQL使用CASE時的性能問題
- 24. SQL Server屬性訂購時是否有集羣問題
- 25. 如何在SQL Server 2008中使用ISNULL到所有列名稱?
- 26. 在使用Castle ActiveRecord/NHibernate和WCF時是否有任何問題?
- 27. 是否有任何問題向SQL Server表添加列
- 28. 在ISNULL中包含CASE語句時的SQL性能
- 29. ISNULL()使用LEFT JOIN時,IS NULL性能
- 30. 在混淆應用程序時是否存在任何潛在的問題?
你不能測試看看嗎? –
取決於很多事情,一如既往。你如何使用它,你在哪裏使用它,你的查詢是什麼。更多細節可能會有幫助 – Paddy
@SergioTulentsev我正在進行一個增強項目。所以我們添加了一些新的colomns到tbls。那將是空的。可用於開發的數據只有少數。生產數據庫非常龐大。我無法訪問它。 – kbvishnu