우선 쿼리들 결과부터 보시면요..빨간색 부분이 문제입니다.
SELECT
A.*
FROM MT_DIARY A, MT_MEMBER B
WHERE A.EMAIL=B.EMAIL
ORDER BY A.SEQ DESC
LIMIT 0, 100;
--> 0.037sec
SELECT
A.*
FROM MT_DIARY A, MT_MEMBER B
WHERE A.EMAIL=B.EMAIL
AND B.REPORT_COUNT < 4
ORDER BY A.SEQ DESC
LIMIT 0, 100;
--> 0.028sec
SELECT
A.*
FROM MT_DIARY A, MT_MEMBER B
WHERE A.EMAIL=B.EMAIL
AND B.REPORT_COUNT < 4
AND B.LOCALE = 'KR'
ORDER BY A.SEQ DESC
LIMIT 0, 100;
--> 0.024sec
SELECT
A.*
FROM MT_DIARY A, MT_MEMBER B
WHERE A.EMAIL=B.EMAIL
AND B.REPORT_COUNT < 4
AND B.LOCALE = 'US'
ORDER BY A.SEQ DESC
LIMIT 0, 100;
--> 6.101sec
SELECT COUNT(1) FROM MT_DIARY; --> 893518 건
SELECT COUNT(1) FROM mt_member WHERE LOCALE = 'KR'; --> 150088 건
SELECT COUNT(1) FROM mt_member WHERE LOCALE = 'US'; --> 1 건
Table Key_name Column_name Cardinality
mt_diary PRIMARY seq 971710
mt_diary idx1_mt_diary email 97171
Table Key_name Column_name Cardinality
mt_member PRIMARY email 172736
mt_member idx1 last_conn_date 232
mt_member idx1 jender 343
mt_member idx_2 device_code 172736
빨간색 부분이 문제인데요..
US라고 만족하는 데이터가 약 15만건중 1건이 있습니다. 추후에는 늘어나겠지만 현재는 그래요..
인덱스로 할수도 없는게 selectivity 가 1% 미만이 될수도 있어요..
현재 mt_diary테이블에 idx1_mt_diary selectivity가 10% 정도라 인덱스가 유명무실해졌는데요...
이런경우 어째 해야할까요?? 답이 없는거 같아요..ㅜㅜ
참고로 innoDB입니다. |