2017-08-08 62 views
-2

我試圖優化查詢以儘可能優化執行,我發現某些代碼是別人編寫的並且已經與他們討論過,他們似乎認爲以下是表現最好的:在ISNULL中包含CASE語句時的SQL性能

ISNULL(CASE WHEN A = 1 THEN 1 END, 0) 

不過,我說,這可以通過以下方式進行明確,並可能更有效:

CASE WHEN A = 1 THEN 1 ELSE 0 END 

我在網上找了一個類似的案件,但似乎無法找到一個明確的答案,所以我正在尋找一個人更多有關基於性能的T-SQL設計的經驗,讓我更好地瞭解哪個(如果有的話)執行速度更快。

+5

* * *變體實際上是應用程序性能瓶頸的機率可以忽略不計。不要把注意力集中在錯誤的地方。如果你有特定的目標,並且與這些目標相比你有一個*可衡量的*績效赤字,那麼計算出*真實*熱點的位置並將注意力集中在那裏。 –

+1

我同意@Damien_The_Unbeliever,並補充一點,請記住,ISNULL將評估數據_before_存在的任何數據類型的評估發生。如果刪除了ISNULL,必要時將嘗試隱式數據類型,這可能會導致性能問題。儘管如此,這是無關緊要的。 – Phoenix

+0

您可以檢查查詢計劃,以查看查詢引擎是否實際上存在差異 - 看起來像是一個非常小的微型優化,儘管它根本就沒有。 – Andrew

回答

1

有可能更好的地方集中注意力。爲了它的樂趣,我嘗試了你提出的這個特定問題,並且查詢計劃是相同的。

如果您遇到性能問題,也許讓自己的自由的布倫特奧扎爾的工具副本:https://www.brentozar.com/askbrent/

在這些工具中,你會得到sp_BlitzFirst它可以幫助你找到bonafide瓶頸,拿起一個瞭解未來會導致什麼麻煩。

優化時,我發現設定目標是最困難的部分,儘管一旦完成,您的工作或多或少都會被裁減掉。
你寫

我試圖優化查詢執行儘可能

你需要定義什麼是性能目標爲最佳。如果您的查詢花費的時間過長,則需要確定可接受的速度,然後朝着該目標努力。如果你不這樣做,你會花太多時間在一個查詢上。