본문 바로가기
데이터베이스 SELECT

Set vs Procedure

by 홍보살 2025. 2. 4.

우리가 사용하는 RDBMS는 테이블들의 모음(상세히 말하자면 page 혹은 block 그 상위인 extent)이다.

data mining을 위해서는 머리속의 연산방식을 변경해야 한다.

예를들어 엑셀의 필터(고급/자동) 정도 수준에서 벗어나지 못하면 대용량 테이블들간 조인이 불가능하다.

보통 Set단위 사고의 전환이 안될때 가장 많이 하는 행동이 쿼리를 분할하거나 외부 커서로 연산 이용하는 경우 또는 select절에 UDF를 만들어 처리하는걸 정말 많이 목도하게 된다.

정말 치욕적이지 않은가?

9할이상의 개발자들이 procedural(절차적) 한 조건분기와 순환문에서 벗어나지 못한다.

 

간단한 예로 당신의 수준을 점검해 보자.

전형적인 절차적이고 레코드단위 연산으로 수억개의 데이터라면 답이 안나올수도 있다.

 

DBO.TEST 라는 테이블이 있고 컬럼중 col3에 단일컬럼 index가 존재한다고 가정하자.

원본 쿼리는 아래와 같다.

 

SELECT *

  FROM DBO.TEST

 WHERE 1 = 1

AND col3 IN (CASE WHEN col4 ='A' THEN 'K9' WHEN col4 ='B' THEN '아반떼' WHEN col4 ='C' OR col4='D' THEN 'G80' WHEN col4 ='E'  THEN 'K5'  END);

 

매우 심플한 쿼리로 3년차 이상의 개발자가 귀차니즘을 널어낸다면 쉽게 처리가 가능해야 한다.

현재 row count는 1억개라고 가정한다.

위 쿼리라면 full scan을 피할 수 없다.

상식적으로 본다해도 col4를 하나하나 계산하며 비교해야 한다.

 

쿼리를 만드는데 정답은 없겠으나 위 쿼리를 set base 로 변형해 보길 강권한다.

아주 간단하게 해결했다면 데이터베이스 다룰 기본기는 갖춘것이라 보겠다.

나의 의견은 일주일 뒤에 댓글로 

 

그럼 행운이 있기를..

 

이 글은 이비니어스( www.evinious.co.kr )의 소유이며 불펌은 허락하지 않습니다.