제목 | mysql 풀아우터 조인 후에 서브쿼리 | ||
---|---|---|---|
카테고리 | DB | ||
글쓴이 | 주말생각 | 작성시각 | 2021/04/14 14:33:37 |
|
|||
개발환경 mysql 5.0
두 개의 테이블을 풀아우터 조인을 하기 위해서 아래와 같이 쿼리를 만들었습니다. SELECT ex01, ex02, A_exDate AS ddate FROM A UNION SELECT ex01, ex02, B_exDate AS ddate FROM B 그리고 위의 쿼리를 서브쿼리로 만들었습니다. select *from (SELECT ex01, ex02, A_exDate AS d_date FROM A where A_exDate >= 'xxxx-xx-xx' AND A_exDate <= 'xxxx-xx-xx' UNION SELECT ex01, ex02, B_exDate AS d_date FROM B where B_exDate >= 'xxxx-xx-xx' AND B_exDate <= 'xxxx-xx-xx' ) AS c GROUP BY c.d_date 그룹바이는 필요에 의해서 했습니다. 쿼리문을 실행시키니 확실히 느리더라고요. EXPLAIN select *from (SELECT ex01, ex02, A_exDate AS d_date FROM A where A_exDate >= 'xxxx-xx-xx' AND A_exDate <= 'xxxx-xx-xx' UNION SELECT ex01, ex02, B_exDate AS d_date FROM B where B_exDate >= 'xxxx-xx-xx' AND B_exDate <= 'xxxx-xx-xx' ) AS c GROUP BY c.d_date 으로 어떻게 성능을 개선할 수 있는 부분을 찾을 수 있을까해서 보니 테이블 A는 type이 rang이고 테이블B는 type이 ALL이더라고요. 테이블A만 조건에 해당하는 데이터 부분만 검색하고 테이블B는 전체 스캔을 하더라고요. 분명 똑같이 조건을 줬는데, 테이블 B만 전체 스캔을 하는 이유를 모르겠습니다. |
|||
다음글 | 웹서버 분리에 대해서 (2) | ||
이전글 | 그룹바이 정렬 (5) | ||
한대승(불의회상)
/
2021/04/14 14:34:53 /
추천
0
B_exDate 에 인덱스 걸려있나 확인해 보세요.
|
주말생각
/
2021/04/14 14:39:58 /
추천
0
select하는 컬럼에는 모두 인덱스를 걸었습니다. +지금 확인해보니 EXPLAIN SELECT ex01, ex02, B_exDate AS d_date FROM B where B_exDate >= 'xxxx-xx-xx' AND B_exDate <= 'xxxx-xx-xx' 만 실행하니 이래도 전체 스캔이네요. 이게 문제인듯 싶은데... |
주말생각
/
2021/04/14 15:48:31 /
추천
0
+이유를 알 것 같습니다. 스캔 방식이 데이터의 양에 따라서 DBMS가 임의로 판단하여 가장 적합한 방법을 사용하는 것 같습니다. 테이블B의 경우에는 데이터가 A에 비해서 상당히 많거든요. 대략 데이터 비율이 1:200 정도입니다. 아마 테이블 B의 데이터가 많아서 풀스캔을 하는 것이 아닌가 싶습니다. 혹시 제가 잘 못 이해해고 있지는 않겠지요. |
변종원(웅파)
/
2021/04/14 15:52:13 /
추천
0
index 걸린 date 필드를 대상으로 테스트를 해봤는데 < > 조건 일 경우 인덱스를 안타고 = 조건일 경우는 인덱스를 타는 현상이 나오네요. 아래와 같이 테이블명 뒤에 FORCE_INDEX 를 선언하니 인덱스를 탑니다. 테스트 해보세요 explain select *, supportEndDate as st from license FORCE INDEX(supportEndDate) where `supportEndDate` >= '2020-01-01' and supportEndDate <= '2021-12-01' ; |
주말생각
/
2021/04/14 16:03:01 /
추천
0
변종원님 감사합니다. 그런데 인덱스를 타게하니까 속도가 더 걸리네요. 풀스캔이 더 적합한 건지...이대로 인덱스를 타게할지 고민되네요. 대략 0.07초 차이가 있는데 |
한대승(불의회상)
/
2021/04/14 16:46:33 /
추천
0
당연하게도 컬럼 타입은 datetime 이거나 date 이겠죠. ^^;;
|