SELECT A.* FROM C LEFT OUTER JOIN A ON (A.datetime < '20210512' AND A와 C의 조인키값 등'); SELECT B.* FROM C LEFT OUTER JOIN B ON (B.datetime < '20210512' AND B 와 C의 조인키값 등');
위와 같이 A, B 두개의 테이블이 존재하고 C라는 테이블로 각각 LEFT JOIN 한다고 합니다.
이때 위 SELECT 의 결과는 170만row, 아래 SELECT 의 결과는 95만row쯤 됩니다.
그리고 소요시간이 문제인데 아래 95만 row를 셀렉하여 임시 테이블에 전체를 담는 시간이 4.6초 가량 소요됩니다 근데 문제가 위 170만 row를 셀렉하여 임시테이블에 담는속도가 몇분이 지나도 끝나지 않으며 query 시간은 1초 이내에 끝나지만 fetch 과정에서 수십분이 걸리고 있는데 이유를 잘 모르겠습니다.
그래서 전체를 셀렉하지말고 동일한 limit를 걸어도 두 테이블 간에 시간차이가 기하급수적으로 차이가 나고 있습니다.
테이블에 문제가 생겼는가 해서 check table해봐도 별다른 이상 없고, 두개 테이블 explain 을 해봐도 문제가 되는 부분을 모르겠습니다
(두개의 테이블의 구조는 얼추 동일 하여 인덱스도 동일한 형식으로 걸어둔 상태입니다)
explain 결과는 아래와 같이 두개 셀렉트가 동일 합니다.
1 | SIMPLE | C | index | unique_key | 853 | 4886 | 100.00 | Using index | |||
1 | SIMPLE | A | ref | 98 | 52 | 50.00 | Using where |
질문이 정리가 잘 안된거 같지만 좀 간략하게 정리해보자면 구조가 비슷한 두개의 테이블을 각각 동일한 테이블 한개와 조인하여 select 를 해오는데 데이터량을 떠나서 두개 테이블간에 fetch 속도차이가 너무 심합니다.
혹시 참고 할수 있는 정보 주시면 감사하겠습니다