對於一些簡單的邏輯測試,CASE WHEN和DECODE語法可以實現相同的功能。什麼方法更好?(需要論證/測量)?哪種方法更好 - CASE何時或解碼
SUM(CASE WHEN xyz=100 THEN 1 ELSE 0 END)
或
SUM(DECODE(xyz,100,1,0))
對於一些簡單的邏輯測試,CASE WHEN和DECODE語法可以實現相同的功能。什麼方法更好?(需要論證/測量)?哪種方法更好 - CASE何時或解碼
SUM(CASE WHEN xyz=100 THEN 1 ELSE 0 END)
或
SUM(DECODE(xyz,100,1,0))
最近我偶然發現了這一點:https://community.oracle.com/thread/1112467?tstart=0
「的性能差異非常輕微,這使得在使用作爲主要標準,是否使用CASE或DECODE很少的感覺所以,除非你。我們從一個非常緊密的循環中調用這個語句來做數百萬次的迭代,所以決定應該選擇哪一種CASE或DECODE最適合這種需求。「
在多個條件檢查的case
,Case
更簡單相比Decode
當寫。另外Decode
不能在PL/SQL代碼中使用,其中CASE
是可能的。
在同一平臺上,CASE
和DECODE
之間的性能差異很小。人們必須運行1000次迭代中的100次才能看出差異,即便如此,這種差異是否僅僅歸因於CASE
與DECODE
也是有爭議的。
取決於CPU的類型,在CASE
和DECODE
之間的性能似乎有差異。在某些CPU架構上,DECODE
看起來會稍微快一點。在其他人看來,CASE
似乎會稍微快一點。
性能差異非常小,因此將其作爲是否使用CASE
或DECODE
的主要標準的意義不大。因此,除非您從一個執行數百萬次迭代的非常緊密的循環中調用此聲明,否則決定應該選擇哪一個CASE或DECODE最適合需要。
錯誤的問題真的..除非你寫了一個非常嚴格的循環,使用這種類型的條件結構來做1000次迭代的100次。即使如此,性能差異也不會那麼重要。
要問的正確問題是哪一個更靈活,並且允許程序員在閱讀並理解和維護代碼之後找到它。 CASE
聲明就此而言,比DECODE
聲明好很多。我只看性能(我建議你不要孤立地做!),我在不同平臺(HP-UX vs SUN AMD)和操作系統(HP-UX vs Linux)上使用10G企業版獲得了不同的結果。 。
在前者DECODE
稍快。在後者CASE
稍快。
使用您所指定的結構,做10萬次迭代的緊密循環,經過執行時間:
DECODE
= 00:00:11.83CASE
= 00:00:12.32DECODE
= 00:00:02.02CASE
= 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中,並沒有討論CASE
或DECODE
是否更快。正如我所提到的,我認爲正確的問題是關於可讀性和維護性,而不是在這種情況下的性能。
相同。 。 。 – Yossi
'CASE WHEN'是標準SQL,'DECODE'不是。所以我使用'CASE WHEN'來儘可能使我的查詢可讀和可維護。 –