티스토리 뷰

DB

대용량 데이터 UPDATE하기(MS-SQL)

이안_ian 2019. 11. 11. 14:01




반응형

소량의 데이터를 칠 경우 그냥 UPDATE를 하면 되겠지만 데이터가 1만, 10만건이 되었을 경우 한 트랜젝션에 그 많은 작업을 물리기엔 시간이 너무 오래 소요된다. 그래서 이렇게 대량의 데이터를 UPDATE할 경우 100건이나 1000건씩 나눠서 트랜잭션을 쪼개는게 더 효율적이다.

 

이 방법은 프로시저를 이용하여 while문을 쓸 것이다.

 

DECLARE @WHERE_STR VARCHAR(1000);
SELECT @WHERE_STR = SELECT_NAME FROM A WHERE FORM_TYPE = 'TEST'

WHILE 1=1
BEGIN
	UPDATE TOP(1000) TARGET_TABLE 
	SET SELECT_CD = 'CHANGE TXT '
	WHERE SELECT_CD = @WHERE_STR
	
	IF @@ROWCOUNT < 1000
		BREAK;

	WAITFOR DELAY '00:00:00.020'
END

처음 2줄은 사실 없어도 될 부분이지만 필자의 경우 긴 문자열을 사용하다보니 값이 잘 먹지 않아서 저런식으로 변수에 해당 값을 담아 사용했다.

 

다시 while로 들어와서 먼저 1=1 이라는 무한 루프를 만들고 타켓테이블의 1000번까지의 데이터를 불러 오는데 where조건에 맞는 데이터를 불러온다. 그리고 그 값을 CHANGE TXT 로 바꾸고 나면 트랜잭션을 쪼개기 위해 DELAY를 0.02초를 줘서 잠깐의 틈을 만들어준다. 그리고 1000개씩 불러오는데 @@ROWCOUNT로 반영된 ROW를 읽어 들여서 1000개 이하면(3200 - 3000 = 200 이러면 마지막까지 다 변경된 것) 변경할 데이터가 더 없으니 탈출을 하는 구문이다.

 

아직 변경할 데이터가 남았다면 WHERE조건으로 변경된 데이터를 제외한, 다시 위에서 1000개의 데이터를 불러와 위와 같은 행동을 반복한다.

 

 

반응형
댓글
반응형
최근에 달린 댓글
글 보관함
Total
Today
Yesterday
최근에 올라온 글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30