본문 바로가기

빅데이터과정/OWI

#39_140806_OWI_UPDATABLE JOIN VIEW

728x90

# UPDATABLE JOIN VIEW






updatable join view

아래의 update 문장은 90만건 이상을 가진 테이블을 update 하는문장인데 이런 경우에 메인쿼리를 읽고 서브쿼리를 읽어들이기 때문에 date_id의 rn이 맞는 row를 하나하나 찾아서 90* 90만 = 1800만 건의 update를 수행한다
이럴 경우 updatable join view가 필요하다
이 조인방법은 다른 조인방법에 비해서 속도가 빠르다

update sales200 s
 set  date_id = ( select date_id
from time2 t
                where  t.rn  = s.rn );



updatable join 



위 쿼리를 보면 emp_loc 컬럼은 비어있는 컬럼이고 dept_loc는 각각의 사원이름에 대한 위치가 출력된다
보여주고 하는 것은 비어있는 emp_loc 컬럼에 dept_loc의 데이터를 위처럼 그대로 입력하는 것이다





이전 그림에서 수행했던 select 문을 update문에 써주고 set 문장에 원하는 컬럼(emp_loc) 입력하도록 수행하면 빠르게 수행할 수 있따
위에서 예로 들었던 쿼리로 sales 테이블로 수행한다면 6시간 이상걸리게 된지만updatable join view를 이용하면 1분 내외로 수행할 수 있따






문제105. 아래의 SQL을 재작성 하시오(조인을 안하고도 똑 같은 결과가 나오도록 하시오)

수행을 위한 테이블
drop  table  sales200  purge;

drop  table  sales100  purge;

create table sales200
as
 select rownum rn, prod_id, cust_id, time_id, channel_id,
           promo_id, quantity_sold, amount_sold
  from sh.sales;

alter table sales200
           add date_id date;

drop table time2 purge;

create table time2
       ( rn number(10),
       date_id  date );

begin
  for i in  1 .. 918843  loop
     insert into time2
        values( i  , to_date('1961/01/02','YYYY/MM/DD')+ i );
   end loop;
end;
/

commit;

alter   table  time2
add   constraint   times200_time_id_pk  primary key(rn);

alter  table  sales200
add  constraint  sales200_time_id_fk  foreign  key(rn)
 references  time2(rn);


튜닝 전
update sales200 s
 set  date_id = ( select date_id
                       from time2 t
                       where  t.rn  = s.rn );
설명 메인쿼리의 테이블의 건수만큼 update 문이 반복 되고 있기 떄문에 속도가 굉장히 느리다
메인쿼리 테이블의 컬럼이 서브쿼리 안으로 들어가게 되면 메인쿼리부터 수행이 된다
s.rn 에 1 ~ 918443 번까지 수행을 한다
튜닝 후
# merge 

MERGE INTO SALES200 s
USING time2 t
ON (t.rn = s.rn)
WHEN matched THEN
UPDATE SET s.date_id = t.date_id;
수행시간 : 60

# updatable join view

UPDATE (SELECT s.rn, s.date_id AS sales_id, t.date_id AS time2_id
 FROM SALES200 s, time2 t
 WHERE s.rn = t.rn)
SET sales_id = time2_id;
수행시간 : 45
튜닝을 하기전에는 6시간이상 걸리던 쿼리를 updatable join을 이용해서 45초로 단축시킬 수 있다




'빅데이터과정 > OWI' 카테고리의 다른 글

#40_140807_OWI_LATCH  (0) 2014.08.07
#40_140807_OWI_WAIT EVENT  (0) 2014.08.07
#40_140807_OWI_SHARED POOL에서 LATCH 경합  (0) 2014.08.07
#39_140806_OWI_LATCH  (0) 2014.08.06
#39_140806_OWI_WAIT EVENT  (0) 2014.08.06