조직변경이 발생해서 기존의 부문코드와 라인코드를 새 코드로 갱신하는 업데이트문입니다.
update t_sale sale -- 판매실적테이블
set ( sale.store_cd,
sale.bumon_cd ) = ( select distinct zozik.store_cd_new,
zozik.bumon_cd_new
from t_zozik_byongyon zozik, -- 조직변경비교데이블
t_product_mst prd -- 상품마스트
where zozik.bonbu_cd_old = prd.bonbu_cd
and zozik.store_cd_old = prd.store_cd
and zozik.bumon_cd_old = prd.bumon_cd
and zozik.line_cd_old = prd.line_cd
and zozik.store_cd_old = sale.store_cd
and zozik.bumon_cd_old = sale.bumon_cd )
where exists ( select 'x'
from t_product_mst prd2 -- 상품마스트
where prd2.store_cd = sale.store_cd
and prd2.bumon_cd = sale.bumon_cd
and prd2.product_cd = sale.product_cd )
and exists ( select 'x'
from t_zozik_byongyon zozik, -- 조직변경비교데이블
t_product_mst prd -- 상품마스트
where zozik.bonbu_cd_old = prd.bonbu_cd
and zozik.store_cd_old = prd.store_cd
and zozik.bumon_cd_old = prd.bumon_cd
and zozik.line_cd_old = prd.line_cd
and zozik.store_cd_old = sale.store_cd
and zozik.bumon_cd_old = sale.bumon_cd )
-- 조직변경비교데이블
bonbu_cd_old store_cd_old bumon_cd_old line_cd_old bonbu_cd_new store_cd_new bumon_cd_new line_cd_new
01 S100 B100 L100 01 S500 B100 L100
01 S200 B200 L200 01 S600 B500 L200
01 S300 B301 L301 01 S700 B600 L301
01 S300 B302 L302 01 S700 B302 L302
-- 상품마스트(t_product_mst)
bonbu_cd_old store_cd_old bumon_cd_old line_cd_old product_cd
01 S100 B100 L100 P001
01 S100 B100 L100 P002
01 S200 B200 L200 P003
01 S300 B301 L301 P004
01 S300 B302 L302 P005
01 S400 B400 L400 P006
-- 판매실적테이블(t_sale) --> 갱신전
store_cd bumon_cd product_cd
S100 B100 P001
S100 B100 P002
S200 B200 P003
S300 B301 P004
S300 B302 P005
S400 B400 P006
-- 판매실적테이블(t_sale) --> 갱신후
store_cd bumon_cd product_cd
S500 B100 P001
S500 B100 P002
S600 B500 P003
S700 B600 P004
S700 B302 P005
S400 B400 P006
판매실적테이블(t_sale)에 대량의 데이터가 존재함으로 성능 개선이 필요하게 됐습니다.
1. MERGE INTO(UPSERT)문을 사용해서 성능을 향상 시킬수 있는 sql문
2. 특별히 MERGE INTO(UPSERT)문이 아니더래도 성능을 향상 시킬수 있는 sql문이나 다른 방법
3. sql조건에 대해서도 좀 알려주세요. 초보라 sql문 자체가 잘 이해가 되지 않네요.
set문과 where문의 조건이 똑같지 않습니다. 똑같이 않써도 특별히 문제가 되진 않나요?
밑에 처럼 set문과 where문의 조건을 똑같이 해야 되는거 아닌가요?
update t_sale sale -- 판매실적테이블
set ( sale.store_cd,
sale.bumon_cd ) = ( select distinct zozik.store_cd_new,
zozik.bumon_cd_new
from t_zozik_byongyon zozik, -- 조직변경비교데이블
t_product_mst prd -- 상품마스트
where zozik.bonbu_cd_old = prd.bonbu_cd
and zozik.store_cd_old = prd.store_cd
and zozik.bumon_cd_old = prd.bumon_cd
and zozik.line_cd_old = prd.line_cd
and zozik.store_cd_old = sale.store_cd
and zozik.bumon_cd_old = sale.bumon_cd
and exists ( select 'x'
from t_product_mst prd2 -- 상품마스트
where prd2.store_cd = sale.store_cd
and prd2.bumon_cd = sale.bumon_cd
and prd2.product_cd = sale.product_cd ) )
where exists ( select 'x'
from t_product_mst prd2 -- 상품마스트
where prd2.store_cd = sale.store_cd
and prd2.bumon_cd = sale.bumon_cd
and prd2.product_cd = sale.product_cd )
and exists ( select 'x'
from t_zozik_byongyon zozik, -- 조직변경비교데이블
t_product_mst prd -- 상품마스트
where zozik.bonbu_cd_old = prd.bonbu_cd
and zozik.store_cd_old = prd.store_cd
and zozik.bumon_cd_old = prd.bumon_cd
and zozik.line_cd_old = prd.line_cd
and zozik.store_cd_old = sale.store_cd
and zozik.bumon_cd_old = sale.bumon_cd )
고수님들의 의견을 좀 부탁드립니다.
|