MS SQL 2000에서 테이블 변수 VS 커서 성능 비교
MS SQL 2000에서 테이블 변수 VS 커서 성능 비교를 간단히 해보았습니다.
고객 테이블에서 고객 정보를 뽑아오는 과정입니다.
레코드는 숫자는 240,063건입니다.
1. 커서를 이용한 경우
프로파일러로 볼때 — Reads : 160, 835
Declare @cust_id INT , @std_name nvarchar(100)
Declare c1 Cursor FOR
select top 10000 cust_id , std_name
from customer
OPEN c1
FETCH NEXT FROM c1 INTO @cust_id, @std_name
WHILE @@FETCH_STATUS = 0
BEGIN
print @std_name
FETCH NEXT FROM c1 INTO @cust_id, @std_name
END
close c1
deallocate c1
2. 테이블 변수를 이용한 경우
– Reads : 40,620
Declare @cust_id INT , @cust_name nvarchar(100)
Declare @tmp Table
( nID int IDENTITY PRIMARY KEY,
cust_id int,
cust_name nvarchar(100)
)
Declare @i INT , @maxNo INT
INSERT INTO @tmp
select top 10000 cust_id , cust_name
from customer
SELECT @i = Min(nID), @maxNo = Max(nID) FROM @tmp
WHILE @i <= @maxNo
BEGIN
SELECT @cust_id =cust_id, @cust_name = cust_name FROM @tmp WHERE nID = @i
print @cust_name
SET @i = @i + 1
END
대략 테이블 변수를 이용한 경우가 1/4로 성능히 향상 되었음을 확인 할 수 있었습니다.
참고 자료
http://www.microsoft.com/korea/technet/sql/tuning_guide_developer01.mspx#EEAA04
