본문 바로가기
Data Analysis/SQL

[SQL] 06. 조건 분기 응용1 (CASE 식과 WHERE 구의 비교)

by Dlearner 2019. 7. 17.
반응형

조건분기 활용 비교하기

저번 포스팅에서, CASE 식을 활용한 조건분기를 활용하면 쿼리의 성능을 높일 수 있다고 언급을 하였다.

특히, UNION + WHERE 구를 활용한 조건분기의 경우와 비교하면 그 성능의 차이를 쉽게 비교할 수 있다.

 

 

 

CASE 식 vs UNION + WHERE 구

아래의 ITEMS 테이블 예시를 통해 성능적인 측면에서 CASE 식과 UNION + WHERE  구의 비교를 해보고자 한다.

 

ITEMS 테이블에서 PRICE_TAX_EX는 세전 가격을, PRICE_TAX_IN은 세후 가격을 나타낸다. 우리가 보고자 하는 결과 테이블에서는 2001년 이전의 물품 가격은 PRICE_TAX_EX(세전 가격)으로, 2002년 이후의 물품 가격은 PRICE_TAX_IN(세후 가격)으로 추출되는 PRICE 컬럼을 만들어내는 것이다.

 

- ITEMS 테이블 -

 

 

 

 

- UNION + WHERE 구 활용

아래의 쿼리는 WHERE 구 조건에 만족하는 두개의 레코드 집합을 UNION ALL를 활용하여 하나의 테이블로 검색해준다.

 

여기서 눈여겨볼 점은 WHERE 구를 두번 사용함으로써, 거의 기능이 같은 쿼리임에도 불구하고 ITEMS 테이블을 두번 불러와 처리한다는 점이다. 같은 모양 쿼리의 반복으로 읽기 힘들뿐만 아니라, 성능적인 면에서도 비효율적인 쿼리라고 할 수 있겠다.

 

- UNION + WHERE 구를 활용한 조건분기 -

 

 

 

 

- CASE 식 활용

위의 예시와 비교하기 위해 CASE 식을 활용하여 같은 결과를 뽑아내 보았다.(정렬은 약간 다르지만 레코드의 값은 동일하다.)

아래의 쿼리에서는 SELECT 구에 CASE 식을 활용한 조건을 집어 넣었기 때문에, 테이블을 한 번만 불러와 조건을 처리하게 된다. 이번 예시는 테이블이 작아 그 성능의 차이를 체감할 수는 없지만, 레코드가 많아질수록 성능의 차이를 실감할 수 있을 것이다.

 

 

 

 

결론적으로 UNION + WHERE 구를 활용한 분기는 SELECT "구문"을 기본 단위로 하지만, CASE 식을 활용한 분기는 SELECT 구문 안의 CASE "식"을 기본 단위로 하여 쿼리 생성 시 절차 지향적인 발상에서 벗어날 수 있다.

 

SQL에서의 조건 분기를 사용할 때, CASE로 표현하는 것이 여러모로 효율적인 결과를 만들어 낼 수 있을 것이다.

반응형

댓글