update or insert 를 처리할 수 있는 upsert 문에서 다 건의 데이터를 처리할 순 없었다.
2개의 List 객체를 초기화 하고 신규 데이터와 기존 데이터로 분리, 그리고 각각 일괄로 처리 하였다.
update multi rows sample 1
update test as t set --업데이트 하고자 하는 테이블 t
column_a = c.column_a
from (
values
('123', 1), --업데이트 데이터 row_1
('345', 2) --업데이트 데이터 row_2
) as c (column_b, column_a) --업데이트 가져오는 테이블 c
where c.column_b = t.column_b;
update multi rows sample 2
update test as t set
column_a = c.column_a,
column_c = c.column_c
from (
values
('123', 1, '---'),
('345', 2, '+++')
) as c (column_b, column_a, column_c)
where c.column_b = t.column_b;
50건의 데이터를 가지고 있는 List 처리 속도와 2건의 데이터를 가지고 있는 List 처리 속도를 비교해보니 느리진 않았다.
오히려 50건의 다중 건을 처리하는데 40~50%는 빨라질 거라는 기대는 무너졌달까.
기존 for loop 를 통한 50건의 단 건 upsert 문 처리 시간에 비해, 한 방에 50건의 다 건 update 문이 1~2초 정도.
그래도 이런 데이터가 1,000건 실행되면 1,000초나 빨라진다 생각하니 나쁘지 않다.
반응형