안녕하세요 초보개발자입니다. 쿼리튜닝 관련해서 질문드립니다.
3억건짜리 테이블을 조인하는 쿼리를 작성해야하는데
드라이빙 테이블을 어떻게 지정해햐하는지 도무지 모르겠어서 질문 남깁니다.. 도움좀 부탁드리겠습니다 ㅠㅠ
[사용 db : PostgreSQL 12]
범례 :
Mview T1 (4만건), Mview T2 (70만건) ,테이블 T3 (3억건)
위와같이 T1,T2,T3테이블이 존재하고 모두 COL1이라는 연결컬럼을 가지고있고 관계는 1:1:1입니다.(각각 연계 테이블이기에 FK설정은 없습니다.)
또한 T1,T2,T3모두 COL1컬럼에 인덱스가있습니다.
이때 3개의 테이블을 조인해서 T2.*, T3.*내용을 보아야합니다
제가 작성한 쿼리는 다음과 같습니다.
1) T1,T2를 조인합니다. 아래 쿼리의 경우 1초?도안되서 결과를 표출합니다. 결과로우는 1:1관계이기에 4만건이 찍힙니다.
SELECT
B.*
FROM T1 A , T2 B
WHERE A.COL1 = B.COL1
2) 위 쿼리를 서브쿼리로 T3과 조인합니다.
SELECT * FROM
(SELECT B.* FROM T1 A , T2 B WHERE A.COL1 = B.COL1) TT1, T3
WHERE TT1.COL1=T3.COL
이렇게 돌리면... 당연하겠지만 1시간,2시간이 지나도 먹통입니다 ㅠ
위 쿼리에서 TT1이 4만건이고 T3이 3억건이라면
TT1을 FROM절 앞쪽에 기술해서 드라이빙 테이블로 인식을하는게 아닌가요?
플랜이라도 보고싶어서 플랜을떠도 역시나 먹통입니다...
이런 케이스에 어떤식으로 쿼리를 튜닝을해야하는지..
모범답안과 그에대한 간략한 설명좀 부탁드리겠습니다 ㅠㅠ
도와주십시오!!ㅠㅠ