소소한 팁일 수 있는데 모르는 분은 저처럼 모르셨을 것 같아 공유합니다.
이번 주 1100만 건 정도 들어 있는 Table에 Column 3개를 추가하는 역정규화 작업을 진행했었습니다.
DB에 대한 이해가 없었기 때문에 자연스럽게
콘솔앱을 만들고
콘솔앱에서 필요한 데이터를 모두 가져온 뒤
콘솔앱에서 데이터를 만들어서
역정규화 테이블로 반복문을 통해 update
이렇게 했었는데요. 아시는 분들은 아시겠지만 위 프로세스는 엄청나게 오래걸립니다. 관련해서 서칭을 해보니, UPDATE or MERGE of very big tables in SQL Server - Stack Overflow 이런 링크를 찾았습니다. 이 포스트를 보니, 3억 개의 데이터가 있는 테이블을 40분정도면 업데이트 한다고 하는데 이것보다 더 빠른 수행속도를 원하는 글 입니다. 아래 이런저런 설명이 달려있지만 질문자가 MERGE 문을 통해 대규모 업데이트를 수행했다는 사실을 파악할 수 있었습니다. 다른 커뮤니티 지인들도 MERGE JOIN, Update JOIN을 알아보라고 추천해주셨었습니다.
위 글 덕분에 MERGE 쿼리를 작성했고, 1100만 건의 데이터에 대해 update를 4분 30초만에 수행 했습니다. 제 환경은 아래와 같습니다.
varchar(15)
nvarchar(50)
varchar(30)
nvarchar(50)
int
decimal(7,2)
nvarchar(100)
nvarchar(500)
int
decimal(15, 3)
tinyint
char(2)
datetime2
nvarchar(10)
테이블에 대해
4 Core, 3.40 GHz, 16GB RAM, SQL Server 2016 의 스펙으로 진행했습니다.
대규모 업데이트에 대해서 노하우가 전혀 없으신 분들께 추천드립니다.