組み込み関数の場合、返す値を考慮して実行計画を決めているらしい

人気ブログランキング

インデックスのあるカラムへの絞り込み条件に組み込み関数を使った場合、
実行計画がどうなるか疑問に思ったので調べてみました。

例えば、以下のようなSQL。UPDATE_DTにインデックスがはってあるとします。
SELECT * FROM EMP WHERE UPDATE_DT > SYSDATE - 1;
この場合、INDEX RANGE SCAN になりました。

片や、次のようにしたら、TABLE FULL SCANに変わりました。
SELECT * FROM EMP WHERE UPDATE_DT > SYSDATE - 10000;
TO_CHAR/TO_DATEをかました場合も同じように関数が返す値を見て実行計画を作ってくれました。

じゃあ、ユーザー定義関数だったら、どうか?
試したら、INDEX RANGE SCAN のまま変わらなかった。
試しに、DETERMINISTIC を付けても変わらず。

なお、DETERMINISTICって、引数が同じであれば、返す結果はいつも同じですと宣言するパラメータです。
性能向上させる時に使えるそうです。


この記事へのコメント