안녕하세요..
리눅스, MYSQL5.1 버전에서 FUNCTION 을 이용하면서 이상한 점이 있어 급 질문 올립니다..
아래 2개의 FUNCTION 은 같은 기능을 수행합니다.(단지 표현의 방법이 달라요)
차이라면..
FUNCITON-01 은 I_ITEMS_ID 라는 변수를 하나두고 ELEMENT_ID ='010100' 라고 강제 세팅을 한가고
FUNCITON-02 는 I_ITEMS_ID, I_ELEMENT_ID라는 변수를 2개 두고 ELEMENT_ID 를 변수처리 했습니다.
호출 방법은 아래와 같이 했는데요..
- FUNCTION1 호출 : SELECT FUNCTION1(ITEMS_ID) FROM ITEMS; ---> 쿼리속도 : 0.5초
- FUNCTION2 호출 : SELECT FUNCTION1(ITEMS_ID, '010100') FROM ITEMS;---> 쿼리속도 : 5 초
문제는 호출 시 FUNCITON 의 쿼리 속도 차이가 10배 가 난다는 겁니다.
물론 인덱스 다 걸려 있구요.. EXPLAIN 해봐도 문제 없어요..
FUNCTION1 처럼 상수처리 하느냐.. FUNCTION2 처럼 변수처리 하느냐의 문제가 10배 이상의 쿼리 속도 차리를
보인다는게 무슨 문제 때문인건지 알고 싶습니다.
좋은 답변 부탁 합니다.~~
------------------------------------------------------------------
CREATE DEFINER=`dlv2`@`%`
FUNCTION `FUNCTION1`(I_ITEMS_ID CHAR(10)) RETURNS varchar(100) CHARSET euckr
BEGIN
DECLARE O_ELEMENT_VALUE VARCHAR(100);
SELECT ELEMENT_VALUE
INTO O_ELEMENT_VALUE
FROM TEXT_MD
WHERE ITEMS_ID = I_ITEMS_ID
AND ELEMENT_ID ='010100';
RETURN O_ELEMENT_VALUE;
END;
------------------------------------------------------------------
CREATE DEFINER=`dlv2`@`%`
FUNCTION `FUNCTION2`(I_ITEMS_ID CHAR(10), I_ELEMENT_ID CHAR(6)) RETURNS varchar(100) CHARSET euckr
BEGIN
DECLARE O_ELEMENT_VALUE VARCHAR(100);
SELECT ELEMENT_VALUE
INTO O_ELEMENT_VALUE
FROM TEXT_MD
WHERE ITEMS_ID = I_ITEMS_ID
AND ELEMENT_ID = I_ELEMENT_ID;
RETURN O_ELEMENT_VALUE;
END;
|