3억건 테이블 조인 질문드립니다 ㅠㅠ 0 2 1,179

by minmin [SQL Query] 튜닝 sql 드라이빙 [2021.12.22 21:54:40]


안녕하세요 초보개발자입니다. 쿼리튜닝 관련해서 질문드립니다.

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절 앞쪽에 기술해서 드라이빙 테이블로 인식을하는게 아닌가요? 

플랜이라도 보고싶어서 플랜을떠도 역시나 먹통입니다...

 

이런 케이스에 어떤식으로 쿼리를 튜닝을해야하는지..

모범답안과 그에대한 간략한 설명좀 부탁드리겠습니다 ㅠㅠ

 

도와주십시오!!ㅠㅠ

 

by 모래가흙흙 [2021.12.23 13:07:23]

조인순서, 방식등을 조정할 수 있는 힌트같은게 있지않나요?


by 축구쟁이 [2021.12.24 12:54:04]

1:1:1 관계면 결과가 4만건이 나올텐데 1시간 이상 걸린다는건 문제가 있는 듯 하네요.

1:1:1관계가 아니거나 T3에 인덱스가 없거나 또는 의도한 대로 드라이빙 테이블이 설정되지 않았거나 정도 생각합니다.

 

추가적으로 말씀을 드리자면 조인을 할때는 조인 대상 데이터의 범위를 최대한 줄이는 것이 첫번째입니다.

그 이후에 데이터양, 인덱스를 고려해서 드라이빙 테이블을 선정하고

select절에는 꼭 필요한 컬럼만 조회해야 합니다.

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