プロが教える店舗&オフィスのセキュリティ対策術

現在、ORACLE9iで開発していましてPLSQLの中で
ある項目がヌルの時に他の項目とするような場合、
以下の2種類の関数で実現できるのですが
どちらの使い方がスピードが速いのか知りたいのですがよろしくお願いします
1.DECODE(A,NULL,B,A)
2.NVL(A,B)

A 回答 (2件)

普通に考えたらNVLだと思います。


DECODEは
1.関数の認識
2.値Aの一致性確認
3.置き換え文字の確認B
の3ステップがかかりますが
NVLは
1.関数の確認
2.値Aの一致性確認
だけで済みますから。
NVLよりDECODEがいいのであればNVLは存在意義がなくなります。しかし厳密な速さは違いがあるでしょうか
迷うことは杞憂かと思われます。(ほかのことを悩んだ方が良いでしょう)
あとはコードの可読性ですね。
DECODEよりNVLの方が関数を見ただけで何がしたいのかすぐにわかるので可読性があがります。
よくDECODEを変換表のようにやたらめったら使っているSQLを見ますがあれを見るとプログラマの技術を疑います...
    • good
    • 1

どちらかと言われれば No.1 の方が回答されている通り NVL でしょうが、Oracle 9i で随分と SQL99 標準に対応してきているので、できれば、CASE 文を使われるのがベターだと思います。



CASE 文は不等号も使えるため、DECODE よりもさらにルーチンが複雑であり、遅いと思われますが、処理速度についてはどれも気にしなければならないほどではありません。

内部的には、DECODE、NVL、CASE 以外にも、IN を OR に書き換えたり、OR を UNION ALL に書き換えたりというような複雑な処理が行われることもあります。
    • good
    • 0
この回答へのお礼

確かにスピードに差が無ければCASE文のほうがSQL99準拠していてよいのかもしれません、ありがとうございました

お礼日時:2006/05/15 13:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A