slow_query 로그에 계속 남겨지는 쿼인데요..
3개의 테이블을 조인하는 쿼리입니다.
우선 결과값의 의도는 MT_DIARY가 주가 되어 데이터를 보여주는데요
MT_INTEREST_MEMBER.favorite_email와 MT_DIARY.email로 필터를 하여 보여줍니다.
MT_MEMBER 테이블은 필터된 내용들중에 MT_MEMBER의 세부정보를 보여주기 위함으로 조인이 된거구요...
너무 느려요..ㅜㅜ
한개의 테이블이 인덱스로 조인이 되지 않고 ALL로 조인이 되는것이 원인인거 같은데요..
왜 인덱스가 안되는지 모르겠습니다.
테이블 조인 순서도 이래저래 다 변경해봐도 아래의 쿼리가 그래도 최상으로 나오는데요...
(Using where; Using join buffer) 이것때문에 그나마 좀 빠르네요...
본쿼리 :
SELECT
A.SEQ,
A.EMAIL,
A.PUBLIC_OPTION,
A.CONTENT,
B.NICK_NAME,
DATE_FORMAT(A.CREATE_DATE, '%Y-%m-%d %H:%i') AS CREATE_DATE,
B.JENDER AS GENDER,
B.MAIN_PROFILE_FILE AS PROFILE_URL,
(YEAR(CURDATE())-YEAR(DATE_FORMAT(B.BIRTH_DATE, '%Y%m%d')))+1 AS AGE
FROM MT_INTEREST_MEMBER C, MT_MEMBER B, MT_DIARY A
WHERE C.FAVORITE_EMAIL = B.EMAIL
AND C.FAVORITE_EMAIL = A.EMAIL
AND C.EMAIL = '*****@hanmail.net'
ORDER BY A.SEQ DESC;
먼저 본쿼리 explain 입니다.
보면 MT_DIARY의 email 과 MT_INTEREST_MEMBER의 favorite_email가 인덱스인데 서로 조인을 하면 왜 all로 읽을까요...
각각의 테이블들의 INDEX 현황입니다.
|