본문 바로가기
Database

[Query] Join 속도 개선 방법 (feat. SubQuery)

by Life-Journey 2021. 4. 13.
반응형

 

안녕하세요. 오늘은 조인 쿼리의 성능을 개선하는 것을 이야기해보려 합니다.

사실 아직까진 sql 지식이 많이 없고 부족해서 올리지 않을려고 했던 부분이지만..

혹여 저처럼 잘 모르는 분들을 위해 간단하게나마 올립니다.

 

서브쿼리에는 대표적으로 SELECT절 / FROM절 / WHERE절이 있습니다.

말 그대로 각각의 해당 부분에 쿼리문에 또 다른 쿼리문을 적용하는 것인데

필요한 쿼리만을 함축하여 속도를 개선할 수 있습니다.

 

여기서는 크게 두 가지 부분을 가지고 속도 개선을 확인 할 수 있습니다.

 

 

  1. SELECT절 
  2. FROM절 

 

 

 

 


 

 

 

 

 

 

 

 

 

예를들어 tbl_A, tbl_B, tbl_C 이렇게 3개의 테이블을 조인할 경우는 흔히 아래와 같이 사용합니다.

하지만 아래 부분은 tbl_A, tbl_B, tbl_C 테이블에서 모든 컬럼과 모든 데이터들을 전부 조회하기 때문에

속도가 느려질 수 밖에 없습니다.

또한, 데이터양이 많으면 쿼리의 속도는 현저히 느려지기 마련이고,

10개의 테이블을 이런식으로 조인하게 되면 더욱 느려지게 되겠죠.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
SELECT
     TblA.A
 
    ,TblB.B
    
    ,TblC.B
FROM
    tbl_A TblA   
    LEFT OUTER JOIN tbl_B TblB    
            ON TblB.join_value = TblA.join_value
    LEFT OUTER JOIN tbl_C TblC
            ON TblC.join_value = TblA.join_value
cs

 

 

 

 

그래서 서브쿼리를 이용하여 필요한 부분만 추출한 다음, 조인을 진행하면 속도가 일부 개선될 수가 있습니다.

 

 

 

 


 

 

 

반응형

 

 

 

 

SELECT절

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
     TblA.A
 
    ,TblB.B
    
    ,TblC.C
FROM
    (SELECT  A ,join_value   FROM  tbl_A  )   TblA   
LEFT OUTER JOIN 
    (SELECT  B ,join_value   FROM  tbl_B  )   TblB    
        ON TblB.join_value = TblA.join_value
LEFT OUTER JOIN 
    (SELECT  C ,join_value   FROM  tbl_C  )   TblC
        ON TblC.join_value = TblA.join_value
cs

 

 

 

아래와 같이 tbl_A의 컬럼을 전부 불러올 필요 없이,

서브쿼리를 통해 tbl_A의 테이블에서 A라는 컬럼과 조인에 필요한 join_value만 불러 사용하면 됩니다.

또한 서브쿼리 안에 where절과 group by를 통해 불러오는 데이터양을 감소시킬 수 있습니다.

 

 

 

 

 

 

FROM절

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT
     TblZ.A
    ,TblZ.B
    ,TblZ.C
FROM
   (
   SELECT
       TblA.A, TblA.join_value,
       TblB.B, TblB.join_value,
       TblC.C, TblC.join_value  
   FROM  
      tbl_A AS TblA   
   LEFT OUTER JOIN 
      tbl_B AS TblB    
   ON 
      TblB.join_value = TblA.join_value
   LEFT OUTER JOIN 
      tbl_C AS TblC
   ON 
      TblC.join_value = TblA.join_value
   ) AS TblZ
cs

 

 

 

SELECT절도 속도를 개선할 수 있지만

어째꺼나 테이블을 하나하나 불러오기 때문에 시간이 걸릴 수 있습니다.

FROM 절에서 서브쿼리로 하나로 묶어 가지고 오면 좋은 성능을 발휘할 수 있습니다.

 

 

 

 

 

반응형

댓글

Life-Journey님의
글이 좋았다면 응원을 보내주세요!