본문 바로가기

DEV LOGS

[MSSQL] 테이블 변수 VS 임시 테이블

테이블 변수 VS 임시 테이블

- 테이블 변수는 '메모리'에 생성되는 것으로, 다른 변수와 마찬가지로 한 번 사용한 후에는 다시 사용할 수 없지만, 임시 테이블은 'tempdb'에 생성되며 연결이 끊기거나 SQL Server가 다시 시작되지 전까지는 계속 남아 있다.

- 작은 데이터를 임시로 사용할 때는 테이블 변수가 유리할 수 있고, 대용량의 데이터를 임시로 사용할 때는 임시 테이블이 더 나을 수 있다.

( 임시 테이블은 일반 테이블이 갖는 모든 성격을 갖게 되므로 대용량의 데이터의 경우 비클러스터형 인덱스를 생성할 수 있으나, 테이블 변수는 불가능 하기 때문이다. )

- 테이블 변수는 명시적 트랜잭션 (BEGIN TRAN … COMMIT/ROLLBACK TRAN) 내부에 있더라도 영향을 받지 않는다.


테이블 변수와 임시테이블의 사용

- 테이블 변수

1
2
3
DECLARE @tblVar TABLE (id char(8), name nvarchar(10), addr nchar(2))
INSERT INTO @tblVar
    SELECT userID,name,addr FROM userTbl WHERE birthYear >= 1970
cs


- 임시 테이블

1
2
3
CREATE TABLE #tmpTbl (id char(8), name nvarchar(10),addr nchar(2))
INSERT INTO #tmpTbl
    SELECT userID,name,addr FROM userTbl WHERE birthYear >= 1970
cs

- 결과


테이블 변수의 트랜잭션 사용

1
2
3
4
5
DECLARE @tblVar TABLE (id INT)
BEGIN TRAN
    INSERT INTO @tblVar VALUES (1),(2)
ROLLBACK TRAN
SELECT * FROM @tblVar;
cs

- 결과 : 테이블 변수는 트랜잭션의 영향을 받지 않는다.





참고문헌


우재남, 『뇌를 자극하는 SQL Server 2012』 한빛미디어 (2013-03-02 초판발행)




'DEV LOGS' 카테고리의 다른 글

[MSSQL] DROP TABLE VS TRUNCATE TABLE VS DELETE 문  (0) 2018.07.17
[MSSQL] 커서  (1) 2018.07.10
[MSSQL] 스키마 바운드 함수  (0) 2018.07.10
[MSSQL] 사용자 정의 함수의 종류  (0) 2018.07.10
[MSSQL] 사용자 정의 함수  (0) 2018.07.10