2010-03-17 1 views
2

SELECT 문 내에서 여러 호출을 사용자 정의 함수로 만드는 쿼리가 있습니다. 함수 (vfget)는 문자열에 포함 된 key = value 쌍의 값을 반환합니다.사용자 정의 함수에 대한 불필요한 호출을 피하기 위해 MySQL 쿼리를 최적화하십시오.

동일한 쿼리 내에서 다시 사용할 수 있도록 쿼리가 함수를 한 번 호출하여 변수에 저장할 수 있습니까?

현재 내 쿼리는 다음과 같습니다

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 

답변

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 
10 레코드이 많이 안하지만, MySQL에서

중첩 된 쿼리는 버퍼링 때문에 덜 효율적 문제의

+0

감사합니다. "(" –

+0

결과에 첫 번째 필드가 출력되는 것을 피할 수 있습니까? –

+0

@James : 효율성이 떨어지지 만 쿼리를 중첩 된 쿼리로 묶습니다. – Quassnoi

관련 문제