MySql 두개 테이블 select 속도 비교 문의드려요 0 1 1,100

by 토마톰 [MySQL] [2021.05.13 15:15:58]


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 속도차이가 너무 심합니다.

혹시 참고 할수 있는 정보 주시면 감사하겠습니다

by 마농 [2021.05.13 18:14:20]

1. c 를 먼저 읽고 a 로 접근할 때 인덱스가 없는 것 같습니다.
- 실행계획의 빈칸에 인덱스가 표현되어야 합니다.
- 첫번째 줄에 unique_key 가 표시된 부분
2. 굳이 아우터 조인을 해야 하는가?
- 개념상, 이너 조인이 맞을 수도 있습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입