次の形式のクエリがあります。
SELECT akey, avalue, expensiveop(akey) FROM atable WHERE avalue < SOME_CONSTANT;
実行にかなりの時間がかかるユーザー定義関数であるcostiveop()が、テーブル内のすべての行に対して呼び出されるようです。パフォーマンス上の理由から、結果セットの各行に対して1回だけ実行する必要があります。
私は次のアプローチを試しましたが、違いは見られませんでした。
SELECT akey, avalue, expensiveop(akey) FROM (SELECT * FROM atable WHERE avalue < SOME_CONSTANT)
何か案は?