본문 바로가기

연구개발/DBA

varchar(max) + 청크 업데이트(Chunk Update) 성능 비교

728x90
반응형

SQL Server 2005에 varchar(max), nvarchar(max), varbinary(max) 데이터 형이 도입되면서 해당 컬럼을 수정하는데 이용되는 .write() 형태의 Chunk Update 문이 추가되었습니다.


다음 데모 스크립트는 Concatenate 작업에 단순 + 연산자와 .write()를 이용한 청크 업데이트 간의 성능 차이를 확인할 수 있는 데모 스크립트 입니다..
PC에서 수행할 경우, 10000회를 1000회 또는 5000회 정도로 낮춰서 수행해 보시기 바랍니다....




/****************************************************************

             varchar(max) +  청크업데이트(Chunk Update) 사용

****************************************************************/

 

--테스트용테이블변수정의

DECLARE @T TABLE (V VARCHAR(MAX))

INSERT INTO @T VALUES ('')

 

DECLARE @I INT, @S DATETIME

SET @S = GETDATE()

SET @I = 0

WHILE @I < 10000

BEGIN

             UPDATE @T

             SET V.WRITE (REPLICATE('A',10),NULL,NULL)

            

             SET @I = @I + 1

END

SELECT DATEDIFF(MS,@S,GETDATE()), LEN(V) FROM @T

GO

--826     100000 : 수행시간0.826, V 컬럼의길이100,000

 


/****************************************************************

             varchar(max) +  '+' 연산자사용

****************************************************************/

DECLARE @T TABLE (V VARCHAR(MAX))

INSERT INTO @T VALUES ('')

 

DECLARE @I INT, @S DATETIME

SET @S = GETDATE()

SET @I = 0

WHILE @I < 10000

BEGIN

             UPDATE @T

             SET V = V + REPLICATE('A',10)

            

             SET @I = @I + 1

END

SELECT DATEDIFF(MS,@S,GETDATE()), LEN(V) FROM @T

GO

 

--7343   100000 : 수행시간7.3, V 컬럼의길이100,000




/****************************************************************

    테스트 환경 : 2794 Mhz * 8 CPU,   8 GB Memory,  Win 2003 SP1        
****************************************************************/

728x90
반응형