안녕하세요.
oracle 쿼리를 mysql로 마이그레이션 중인데 해당부분에서 심각한 속도저하 현상이 발생해 글을 올려봅니다.
- TEST1 테이블 row수 : 20215
- TEST2 테이블 row수 : 13297
1. 오라클 쿼리
SELECT DECODE(B.TRAN_PR, NULL, 3, TRAN_TYPE), TRAN_GRPSEQ, TRAN_ETC3, TO_CHAR(TRAN_SENDDATE, 'YYYYMMDD'), TRAN_RSLT, COUNT(*), TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS')
FROM TEST1 A, TEST2 B
WHERE 1=1
AND TRAN_SENDDATE BETWEEN TRUNC(SYSDATE-65) AND TRUNC(SYSDATE-2)-(1/86400)
AND A.TRAN_PR = B.TRAN_PR(+)
GROUP BY DECODE(B.TRAN_PR, NULL, 3, TRAN_TYPE), TRAN_GRPSEQ, TRAN_ETC3, TO_CHAR(TRAN_SENDDATE, 'YYYYMMDD'), TRAN_RSLT;
2. MYSQL로 마이그레이션한 쿼리
SELECT IF(B.TRAN_PR IS NULL, 3, TRAN_TYPE), TRAN_GRPSEQ, TRAN_ETC3, DATE_FORMAT(TRAN_SENDDATE, '%Y%m%d'), TRAN_RSLT, COUNT(*), DATE_FORMAT(NOW(),'%Y%m%d%T')
FROM TEST1 A LEFT OUTER JOIN TEST2 B
ON A.TRAN_PR = B.TRAN_PR
WHERE 1=1
AND TRAN_SENDDATE BETWEEN date_add(DATE_FORMAT(NOW(), '%Y-%m-%d'), interval -65 day) AND date_add(DATE_FORMAT(NOW(), '%Y-%m-%d'), interval -2 day)
GROUP BY IF(B.TRAN_PR IS NULL, 3, TRAN_TYPE), TRAN_GRPSEQ, TRAN_ETC3, DATE_FORMAT(TRAN_SENDDATE, '%Y%m%d'), TRAN_RSLT;
오라클 쿼리를 돌렸을때는 1초가량의 시간이 걸린반면 MYSQL쿼리를 돌렸을경우에는 몇분을 기다려도 결과값을 가져오지 못합니다...
제가 마이그레이션을 잘못한건지.. 튜닝이 필요한건지 알려주시면 감사하겠습니다.