본문 바로가기
개발 LOG/DB

[SQL] WITH절

by 문가릿 2023. 2. 10.
반응형

SQL문을 작성하다 보면 Query를 반복해서 사용하는 경우가 발생한다. 한두번의 반복은 괜찮지만, 그 수가 많아질수록 가독성이 떨어지고 재사용할 수 없어 매번 동일한 Query를 작성하거나 수정해야 한다. 이런 문제점을 해소하는데 도움이 되는게 WITH절이다.

 

 

●  WITH절 사용 이유 ?

복잡한 SQL에서 반복적으로 사용되는 서브쿼리의 블록을 하나의 WITH절 블록으로 만들어 재사용 할 수 있게 함으로써 쿼리 성능을 높일 수 있다. 자주 실행되는 경우 한번만 Parsing되고 Plan 계획이 수립되므로 쿼리의 성능향상에 도움이 된다.

 

 

●  WITH절 활용 예제

  • 단일 WITH절
1
2
3
4
5
6
7
8
WITH TEST AS
(
 SELECT 'WITH절' AS STR
   FROM DUAL
)
 
SELECT * 
  FROM TEST;
cs

 

  • 다중 WITH절
1
2
3
4
5
6
7
8
9
10
11
12
13
14
WITH TEST1 AS ( /* WITH문1 */
                SELECT 'WITH1' AS STR1 
                  FROM DUAL 
              ), 
     TEST2 AS ( /* WITH문2 */
                SELECT STR1
                  FROM TEST1 /* WITH문1 참조 */
                 UNION ALL
                SELECT 'WITH2' AS STR2 
                  FROM DUAL 
               )
 
 SELECT * 
   FROM TEST2;
cs

 

 

●  마치며

  • SQL문에서 동일한 데이터를 반복처리시, 성능 개선하는 방법으로 WITH절이 많이 활용된다.
  • 데이터 건수는 적지만 데이터 추출시 I/O처리량이 많은 경우 효과적이다.
  • 여러 부분에 사용될 데이터를 1회 추출하여 임시 테이블에 저장하고, 요청시 저장된 데이터만 읽어 처리하면 되므로 SQL성능개선 및 I/O처리량이 대폭 줄어들 수 있다.

 

 

반응형

댓글