변수
변수란 값을 담아두는 것이라고 모두 알고 있으실 겁니다.
우선 간단하게 변수를 생성하고 설정하는 방법을 알아보겠습니다.
--변수 생성
--declare 변수명 타입
DECLARE @name varchar(20)
--변수에 값 할당
SET @name = 'Kendrick'
--혹은
--userid가 sonim1일 때 이름이 Kendrick일 경우
SELECT @name = P.name FROM tblPerson P WHERE userid = 'sonim1'
SET을 하던 SELECT를 하던 동일한 값이 @name 변수에 할당되는 쿼리입니다.
아래는 @name 변수를 이용해서 이어서 해당 user의 가입일을 알아보겠습니다.
SELECT CreateDate -- 생성일 필드
FROM tblPerson P
WHERE P.name = @name
이정도면 변수의 사용법은 충분히 이해되실것 입니다.
테이블 변수
이제 알아볼 항목은 테이블 변수입니다.
변수에서는 값뿐이 아니라 여러행으로 떨어지는 결과를 담아 둘 수 있습니다.
예를 보 시죠
--테이블 변수 생성, 자료형 대신에 테이블 스키마가 들어가 있다.
DECLARE @userData TABLE(
name varchar(30) NOT NULL,
CreateDate datetime NOT NULL
);
--Insert Into Select 문을 이용하여 k로 시작하는 회원의 리스트를 할당해보자
INSERT INTO @userData
SELECT name, CreateDate
FROM tblPerson
WHERE name like 'k%'
--할당 후에는 변수를 이용하여 테이블처럼 사용가능하다.
SELECT * FROM @userData
변수와 테이블 변수에 대해서 간단하게 알아보았습니다.
테이블 변수를 이용하여 쿼리의 복잡성을 떨어트릴수 있으며, 속도 개선에 많은 도움이 될 것입니다.
테이블 변수와 임시 테이블의 차이점
임시테이블 | 테이블 변수 | |
---|---|---|
존재 기간 | 명시적으로 삭제를 안할 시에는 세션 연결 기간동안 존재 | 명시적으로 삭제를 안할 시에는 배치 처리기간 동안 존재 |
저장소 | Tempdb | Tempdb |
쿼리비용 | 대용량에서는 쿼리 비용 유리 | 소용량에서 쿼리 비용 유리 |
장단점 | 대용량 데이터 처리에 유리 | 소용량 데이터 처리에서 유리 |
세션 단위 처리시에 사용 | 저장 프로시져에서 테이블 변수 사용하면 임시 테이블 사용할 떄보다 저장 프로시저를 다시 컴파일하는 일이 줄어듦 | |
배치 처리 단위인 저장 프로시져에서 사용 유리 |
마치며
잘못 사용하면 성능상 문제가 있겠지만 잘 사용하면 너무나 유용한 기능입니다. 물론 말은 쉽습니다. 하하
사실 잘못 사용하기가 더 어려운 기능이겠네요. !!
좋은 하루 되세요
테이블 변수 임시 테이블 차이점 표 출처 : RunHanii 블로그