データベーススペシャリスト暗記無料で始める

ユーザ定義関数とは?ゆーざていぎかんすう

ユーザ定義関数とは、組込み関数と同じように問合せの式の中から呼べる、自分で定義した関数。値を1つ返すスカラ関数と、表の形で返す表関数がある。業務判定をDB側へ寄せて再利用できる反面、行ごとに呼ばれるため、書く場所を誤ると走査の性能を大きく落とす。

最終更新:2026-10-06

試験情報

データベーススペシャリスト試験の頻出用語/午前II

データベースSPを最短で暗記・合格する →

背景

同じ与信判定や税額計算を複数のアプリが別々に書けば、片方だけ改修されて結果が食い違う。DB側に置けば1か所で済む。一方でDBMSの最適化器は関数の中身を見られないため、返る値も件数も推測できず、行ごとに実行するしかない。「1か所に集める」利点と「最適化が効かない」欠点の綱引きが、この語の論点である。

具体例

SELECT 顧客名, 与信区分(顧客ID) FROM 顧客 を100万行へ流せば関数が100万回走り、同じ判定を結合1回で書いた場合より桁違いに遅くなる。PostgreSQLでは関数にIMMUTABLEやSTABLEを宣言すると呼び出し回数を減らせ、OracleのDETERMINISTICも同じ役割を果たす。

試験での引っ掛け

WHERE lower(メール)=? のように列を関数で包むと、その列の索引は使われず全件走査になる。回避策は関数の結果のほうに索引を張ることで、PostgreSQLとOracleは関数索引、MySQL 8.0は生成列への索引で対応する。またストアドプロシージャと違い、ユーザ定義関数は式の中に書ける代わりに、更新を伴う処理を禁じる処理系が多い。

関連用語

解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。

データベースSPを最短で暗記・合格する →

試験での特徴
  • 分野:午前II
  • WHERE lower(メール)=? のように列を関数で包むと、その列の索引は使われず全件走査になる。