본문 바로가기

Sql

쿼리에서 간단한 FUNCTION 사용에 대한 튜닝 관점

SQLP를 공부하면서 관심을 가져보았던 대목,

현재 프로젝트에도 있고, 과거 운영하던 시스템에서도 많이 있었던 사례인데,

현재 프로젝트를 중심으로 써보자.

현재 마스터류 데이터(자재마스터, 공통코드 마스터 등등)들은 SQL FUNCTION을 만들어서 사용한다.

어디에 사용하느냐? 이런 데이터들은 보통 다음과 같은 구성을 가지는데,

CODE, CODE_NAME, CODE_ETC1, CODE_ETC2, ...

화면상에서는 CODE_NAME이 보이고,

내부적으로는 CODE가 사용된다.

화면에 보여주기 위해서 CODE를 갖고 와서 CODE_NAME을 찾아야 하는데

다음과 같은 경우를 보자.

TB_TABLE1 - 간략하게 다음과 같은 내용을 가짐

ID, CODE, TEXT

TB_TABLE2 - 마스터 테이블

CODE, CODE_NAME

위와 같은 경우 화면에 CODE_NAME을 뿌려주기 위해서 두가지 방법이 있을 수 있다.

1)

SELECT A.ID, A.CODE, B.CODE_NAME

FROM TB_TABLE1 A, TB_TABLE2 B

WHERE A.CODE = B.CODE AND A.ID = '1234'

2)

SELECT A.ID, A.CODE, USER_FUNC(A.CODE) AS CODE_NAME

FROM TB_TABLE1

WHERE A.ID = '1234'

USER_FUNC의 내용은 대충만 생각해보아도 (SYNTAX 생략)

USER_FUNC(v_CODE)

IS s_CODE_NAME VARCHAR2(50) := NULL;

BEGIN

     SELECT CODE_NAME INTO s_CODE_NAME

     FROM TB_TABLE2

     WHERE CODE = v_CODE;

EXCEPTION

     WHEN OTHERS THEN RETURN '';

END;

뭐 이정도 되겠지...

 

그렇다면 과연 1), 2) 두개의 방법 중에 어떤 것이 튜닝 관점에서 더 좋은지 갑자기 궁금해졌음...

현재 여기는 함수들을 저렇게 만들어둔 이유가, 생각보다 마스터류 테이블이 많고(예전에 설비관리 생각하면 많은 것도 아니지만;)

함수를 쓰는게 사용상 간단하기도 하고,(사실 JOIN 해서 쓰는것도 크게 무리는 없는데...)

무엇보다 내가 이곳에 내려오기전에 있던 개발자 둘이 완전 쌩초보라 저런 배려(?) 아닌 배려를 해주었다고

이곳 담당자님께 이야기를 들었는데...

정말 1), 2) 두개 중에 어떤게 더 빠르고(조금이라도) 성능상 무리가 없을까 궁금해졌음...

시간 날 때 책 좀 찾아보고 답을 구해봐야징...

답은 리플로 ㅋㅋ