ユーザ定義関数とは?ゆーざていぎかんすう
ユーザ定義関数とは、組込み関数と同じように問合せの式の中から呼べる、自分で定義した関数。値を1つ返すスカラ関数と、表の形で返す表関数がある。業務判定をDB側へ寄せて再利用できる反面、行ごとに呼ばれるため、書く場所を誤ると走査の性能を大きく落とす。
最終更新:2026-10-06
データベースSPを最短で暗記・合格する →背景
同じ与信判定や税額計算を複数のアプリが別々に書けば、片方だけ改修されて結果が食い違う。DB側に置けば1か所で済む。一方でDBMSの最適化器は関数の中身を見られないため、返る値も件数も推測できず、行ごとに実行するしかない。「1か所に集める」利点と「最適化が効かない」欠点の綱引きが、この語の論点である。
具体例
SELECT 顧客名, 与信区分(顧客ID) FROM 顧客 を100万行へ流せば関数が100万回走り、同じ判定を結合1回で書いた場合より桁違いに遅くなる。PostgreSQLでは関数にIMMUTABLEやSTABLEを宣言すると呼び出し回数を減らせ、OracleのDETERMINISTICも同じ役割を果たす。
試験での引っ掛け
WHERE lower(メール)=? のように列を関数で包むと、その列の索引は使われず全件走査になる。回避策は関数の結果のほうに索引を張ることで、PostgreSQLとOracleは関数索引、MySQL 8.0は生成列への索引で対応する。またストアドプロシージャと違い、ユーザ定義関数は式の中に書ける代わりに、更新を伴う処理を禁じる処理系が多い。
関連用語
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。