3

私はしばらくの間、DECODEおよびNVL関数の内部作業がどのように行われるかを知りたいと思っていました。DECODE関数の引数の数が多い場合、DECODE関数のオーバーヘッドは大きくなりますか?

また、元の値がNULLでない場合でも、NVL関数はNULLの代わりに指定された値を評価しますか?たとえば、NVL(COL1、func_call())の場合、COL1がNULLでなくてもfunc_call()が計算されます。その場合、COL1がnullになることはめったになく、func_call()に時間がかかると、パフォーマンスの問題が発生する可能性があります。

前もって感謝します

4

1 に答える 1

4

NVL は常に両方の引数を評価するため、COL1 が null でなくても func_call() を評価します。

デコードはショート サーキットを行うため、最初の有効な条件で実行が停止します。

同様の引数を使用すると、パフォーマンスは 2 つの間でかなり似ています。if-then-else 型構造が必要な場合を除き、通常はシンプルさ (NVL) に基づいて選択します。

- - 編集 - -

nvl(col1, nvl(col2, '0')) のようにネストされた NVL を使用している場合に NVL を使用する状況では、coalesce(col1, col2, '0') として表現される合体関数を見てください。 ) - 最初の非 null 引数を返します

于 2012-04-25T04:47:38.507 に答える