2016-03-01 44 views
0

對於一些簡單的邏輯測試,CASE WHEN和DECODE語法可以實現相同的功能。什麼方法更好?(需要論證/測量)?哪種方法更好 - CASE何時或解碼

SUM(CASE WHEN xyz=100 THEN 1 ELSE 0 END) 

SUM(DECODE(xyz,100,1,0)) 
+0

相同。 。 。 – Yossi

+2

'CASE WHEN'是標準SQL,'DECODE'不是。所以我使用'CASE WHEN'來儘可能使我的查詢可讀和可維護。 –

回答

1

最近我偶然發現了這一點:https://community.oracle.com/thread/1112467?tstart=0

「的性能差異非常輕微,這使得在使用作爲主要標準,是否使用CASE或DECODE很少的感覺所以,除非你。我們從一個非常緊密的循環中調用這個語句來做數百萬次的迭代,所以決定應該選擇哪一種CASE或DECODE最適合這種需求。「

2

在多個條件檢查的caseCase更簡單相比Decode當寫。另外Decode不能在PL/SQL代碼中使用,其中CASE是可能的。

在同一平臺上,CASEDECODE之間的性能差異很小。人們必須運行1000次迭代中的100次才能看出差異,即便如此,這種差異是否僅僅歸因於CASEDECODE也是有爭議的。

取決於CPU的類型,在CASEDECODE之間的性能似乎有差異。在某些CPU架構上,DECODE看起來會稍微快一點。在其他人看來,CASE似乎會稍微快一點。

性能差異非常小,因此將其作爲是否使用CASEDECODE的主要標準的意義不大。因此,除非您從一個執行數百萬次迭代的非常緊密的循環中調用此聲明,否則決定應該選擇哪一個CASE或DECODE最適合需要。

錯誤的問題真的..除非你寫了一個非常嚴格的循環,使用這種類型的條件結構來做1000次迭代的100次。即使如此,性能差異也不會那麼重要。

要問的正確問題是哪一個更靈活,並且允許程序員在閱讀並理解和維護代碼之後找到它。 CASE聲明就此而言,比DECODE聲明好很多。我只看性能(我建議你不要孤立地做!),我在不同平臺(HP-UX vs SUN AMD)和操作系統(HP-UX vs Linux)上使用10G企業版獲得了不同的結果。 。

在前者DECODE稍快。在後者CASE稍快。

使用您所指定的結構,做10萬次迭代的緊密循環,經過執行時間:

  • HP-UX DECODE = 00:00:11.83
  • HP-UX CASE = 00:00:12.32
  • 的Linux/AMD DECODE = 00:00:02.02
  • 的Linux/AMD CASE = 00:00:01.84

顯然,CPU架構在這裏起着主要作用。 AMD被認爲是市場上最好的64 CPU。 HP-UX PARISC CPU(也是64位)並未真正比較原始性能。此外,這是一個RISC CPU,而AMD CPU相比RISC更相信CISC。

另外有趣的是,我用於此基準測試的Sun AMD/Linux服務器速度更快,大約是HP-UX服務器價格的10%..而且基準測試顯示,它的原始速度提高了約5倍。

一個有趣的練習,但一個有很少的現實世界的價值。是的表現很重要。但在PL/SQL中,並沒有討論CASEDECODE是否更快。正如我所提到的,我認爲正確的問題是關於可讀性和維護性,而不是在這種情況下的性能。

https://community.oracle.com/thread/1112467?tstart=0