사용자 아이디를 던지면 UID를 반환하는 GET_UID 라는 Function을 하나 만들었습니다.
동작은 입력받은 아이디로 SELECT 해보고 있으면 반환, 없으면 UID 하나 생성해서 INSERT 하고 반환하는 동작입니다.
SELECT GET_UID('test');
이렇게 실행하면 '2a4584fb-caa6-4d96-b5f1-1f7e39835023' 이렇게 UID를 반환합니다.
이걸 쿼리에 Where절에 넣었습니다.
SELECT UID, CREATE_DATE
FROM MONTHLY_DATA
WHERE UID = GET_UID('test');
이런식으로요. 데이터가 얼마 없는데도 불구하고, 1.5초정도 소요되는 상황입니다.
SET @UID = GET_UID('test');
SELECT UID, CREATE_DATE
FROM MONTHLY_DATA
WHERE UID = @UID;
이렇게 처리하면 직접
WHERE UID = '2a4584fb-caa6-4d96-b5f1-1f7e39835023'
한 것 처럼 금방 나오고 말이죠.
프레임워크에서 위와 같이 변수 선언해서 처리하면 에러를 뱉는 상황이라 고민하던중에 EXPLAIN 해보니
possible_keys가 NULL, key도 NULL입니다. (직접 UID에 값을 넣으면 PRIMARY로 지정해둔 인덱스를 잘 타고 있습니다.)
인덱스를 못타는 것 같은데, 혹시 왜 이런 현상이 생긴건지 아시는 분 답변 부탁드리겠습니다.
|