代码之家  ›  专栏  ›  技术社区  ›  James Goodwin

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

  •  2
  • James Goodwin  · 技术社区  · 16 年前

    我有一个查询,它在一个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 回复  |  直到 16 年前
        1
  •  2
  •   Quassnoi    16 年前
    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条记录,这应该不是什么大问题。