특정 테이블의 정보를 특정 데이터로 업데이트 해달라는 요청이 가끔 들어온다.
물론 그 데이터는 엑셀로 올것이고, 현재 DB데이터와 1:1 맵핑되는 상황이 아닐것이죠.
그래서 1번의 방법과 같이 임시 테이블에 넣은다음에 쿼리를 돌리겠죠.
하지만 1번과 같이 하게되면 set 절이 반복적으로 Random 액세스를 해서 부담이 발생한다는군요.
뭐 지금까지 요청받은 부분에서 부담요소가 있었던것은 아니지만 , 동료분이 2번과 같은 Oracle 문법을 사용하길래 메모해본다.
우선적으로 위와 같은 성능을 해결하기위해서 "Updatable Join View" 방식을 사용한다고 합니다.
그런데 이 방법은 제약조건이 존재하는데 꼭 UK 또는 PK 설정이 되어 있어야 한다고합니다.
하지만 그렇지 않은 경우도 있을 수 있죠.
그래서 사용하는것이 BYPASS_UJVC 힌트절이라고 합니다.
머 자세한건 잘 모릅니다.
동료분이 사용하길래 메모해둠!!!
-- 1번 update test_a1 a set b = ( select b from test_b1 where a = a.a ) where exists (select 1 from test_b1 where a = a.a); -- 2번 update /*+ BYPASS_UJVC */ ( select a.b a_b, b.b b_b from test_a1 a, test_b1 b where a.a = b.a ) set a_b = b_b; /* drop table test_a1; drop table test_b1; create table test_a1 ( a number, b varchar2(10) ); create table test_b1 ( a number, b varchar2(10) ); insert into test_a1 values(1, 'a1'); insert into test_a1 values(2, 'a2'); insert into test_b1 values(2, 'a2222'); */