优化MySQL查询以避免对用户定义函数的不必要调用

时间:2010-03-17 16:52:27

标签: mysql query-optimization user-defined-functions

我有一个查询,它在SELECT语句中对用户定义的函数进行多次调用。函数(vfget)从字符串中包含的key = value对返回值。

查询是否可以只调用一次函数并将其存储在变量中,以便可以在同一查询中重用它?

目前我的查询是:

SELECT 
        CASE WHEN(right(vfget(appmod_params, 'service'), 3) = '_dd' OR right(vfget(appmod_params, 'service'), 3) = '_wp')
            THEN left(vfget(appmod_params, 'service'), length(vfget(appmod_params, 'service'))-3)
            ELSE vfget(appmod_params, 'service')
        END
FROM ota1003
LIMIT 10

1 个答案:

答案 0 :(得分:2)

SELECT  @vf := vfget(appmod_params, 'service'),
        case when right(@vf, 3) IN ('_dd', '_wp')
            then left(@vf, length(@vf) - 3)
            else @vf
        end
from ota1003
limit 10

或者这个:

SELECT  case when right(vf, 3) IN ('_dd', '_wp')
            then left(vf, length(vf) - 3)
            else vf
        end
FROM    (
        SELECT  vfget(appmod_params, 'service') AS vf
        FROM    ota1003
        LIMIT 10
        ) q

MySQL中的嵌套查询被缓冲,因此效率较低,但只有10条记录,这不应该是一个大问题。