【ORACLE】Functionの実行時間はフェッチに大部分含まれる
OracleのFunctionの実行時間はSQLそのものの完了よりはフェッチの部分に大部分が含まれるように感じる。
Functionを呼び出したタイミングではその中身まで深く計算せず、
フェッチしている中で詳細な計算をしていくようなイメージのようである。
SELECT文の問い合わせの”結果”には、
①Oracleからの検索結果返却開始
②全検索結果のフェッチ完了
の2段階のフェーズがあるが、
SELECTする項目の一つ、ないしそのうちの一部として同じ並びで記述するFunctionは、
基本的には前者「①Oracleからの検索結果返却開始」までの間に全て寄っていて、
検索結果が返却される段階ではもう既に計算済みだと思っていた。
だがどうやらそうではない。
実際にはOracleから検索結果が返却されてから、「②全検索結果のフェッチ完了」までの間に
その計算を行っているようである。
「①Oracleからの検索結果返却開始」が開始した段階では、
実際に発行したSELECTの中に含まれるFunctionの計算は行われていないということなのだな。
仕事のとある案件においてプロジェクトで自作した業務Functionの修正を行った際、
修正前後のスピード比較をしたときにふと疑問が浮かび、簡単な実験をして知った。
Oracle的には常識なのかもしれないが自分用のメモ。