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