계속적으로 대량의 데이터가 싸이는 테이블을 기반으로
계층구조 쿼리로 풀어서 뷰를 보여주고 있습니다.
제가 뷰에대한 개념이 부족해서
이렇게 됬을경우 개발단계에는 데이터량이 적어서 문제가 없는데
데이터가 계속적으로 싸여 늘어났을경우
이뷰가 참조하지 못할만큼 느려질까 걱정됩니다.
한달에 약 천건씩 쌓일것 같습니다.
근데 계층구조로 풀기때문에 뷰 조회시 약 3~4배로 늘어난다고 생각하시면 됩니다.
데이터가 작아서 그리 큰 문제가 되지 않을지 모르지만..
뷰로 구성할때 주의점 같은거를 알고 싶습니다.
제 생각에는 뷰는 그냥 셀렉트 쿼리만 있는 내용인데 그것도 전체 셀렉트만..
참조되는 본테이블이 변경되었을경우 따로 저장공간에 내용을 저장해서 뷰에서 조회 조건을 넣었을경우 따로 저장된 공간에서 조건으로 검색하는것인지
아니면 전체 내용을 뷰에서 셀렉트(처리) 한후 그중에 뷰의 조건에 합당한 내용만 전달하는것인지 그것이 궁금합니다.
퍼포먼스 측면이나 운영측면에서 뷰를 써야될곳과 쓰면 안되는곳에대한 개념도 아직 없습니다.
부탁드립니다.
아래는 뷰 내용~
DROP VIEW EMS_USR.VW_TE_MNTH_ACT_PLAN;
/* Formatted on 2012-01-04 오후 7:56:50 (QP5 v5.115.810.9015) */
CREATE OR REPLACE FORCE VIEW EMS_USR.VW_TE_MNTH_ACT_PLAN
(
PLAN_YM,
SCTN_CD,
PRTM_CD,
ITEM_CD,
STD_COST_PLAN_QTY
)
AS
SELECT -- 월 실행계획을 바탕으로 해당 생산팀의 반제가지 전개 (수발주 단위로 수량 변경)
PLAN_YM -- 계획년월LPAD
,SCTN_CD -- 부문코드
,PRTM_CD -- 생산팀
,ITEM_CD -- 품목
,NVL(CEIL(SUM(STD_COST_PLAN_QTY
)
)
,0
) AS STD_COST_PLAN_QTY
FROM (
SELECT LPAD('-', LEVEL *2, '-') || LEVEL
,CONNECT_BY_ROOT PP.PLAN_YM AS PLAN_YM -- 계획년월LPAD
,CONNECT_BY_ROOT PP.SCTN_CD AS SCTN_CD -- 부문코드
,RM.PRTM_CD -- 생산팀
,RM.LWRNK_ITEM_CD AS ITEM_CD -- 품목
,SF_EMS_DIV(CONNECT_BY_ROOT PP.RUN_PLAN_QTY
* SF_EMS_SPLIT(SUBSTR(Sys_connect_by_path(SF_EMS_DIV(RM.UNIT_QTY * 100
,RM.NUM_RAT
,10
)
,'*'
)
,2
)
)
,NVL(IM.CONV_COEF
,1
)
,10
) AS STD_COST_PLAN_QTY /* 수발주단위 변환 */
,CONNECT_BY_ROOT PP.RUN_PLAN_QTY AS ROOT_PLAN_QTY -- 최상위 계획개수
,CONNECT_BY_ROOT PP.PRTM_CD AS PA_PRTM_CD -- 루트 생산팀
,RM.PARENT_ITEM_CD AS PARENT_ITEM_CD
,RM.UNIT_QTY -- 단위수량
,RM.NUM_RAT -- 수율
FROM TE_STD_RECIPE_MAS RM
LEFT JOIN TE_MNTH_ACT_PLAN PP -- 월 실행계획
ON PP.ITEM_CD = RM.LWRNK_ITEM_CD
AND '000000' = RM.PARENT_ITEM_CD
AND PP.PRTM_CD = RM.PRTM_CD
JOIN TE_STD_RECIPE_MAS LRM
ON RM.LWRNK_ITEM_CD = LRM.LWRNK_ITEM_CD
AND '000000' = LRM.PARENT_ITEM_CD
AND RM.PRTM_CD = LRM.PRTM_CD
LEFT JOIN TE_ITEM_MAS IM
ON RM.LWRNK_ITEM_CD = IM.ITEM_CD
LEFT JOIN TE_PLANFIX PF
ON PP.PLAN_YM = PF.PLAN_YM
AND PP.PRTM_CD = PF.PRTM_CD
AND PP.FACTRY_CD = PF.FACTRY_CD
AND '02' = PF.PROGRAM_ID -- 월 실행계획
WHERE IM.PROD_BUY_YN = '01' -- 생산품만 찾기
START WITH RM.PARENT_ITEM_CD = '000000' -- 최상위
AND PF.DECI_YN = 'Y' -- 확정대상만 제공
AND PP.PRTM_CD IS NOT NULL
AND PP.RUN_PLAN_QTY != 0 -- 수량이 0 이아닌 품목만
CONNECT BY PRIOR RM.LWRNK_ITEM_CD = RM.PARENT_ITEM_CD
AND LRM.PRTM_CD = RM.PRTM_CD
)
GROUP BY PLAN_YM -- 계획년월LPAD
,SCTN_CD -- 부문코드
,PRTM_CD -- 생산팀
,ITEM_CD -- 품목
WITH READ ONLY;
CREATE PUBLIC SYNONYM VW_TE_MNTH_ACT_PLAN FOR EMS_USR.VW_TE_MNTH_ACT_PLAN;
GRANT SELECT ON EMS_USR.VW_TE_MNTH_ACT_PLAN TO FIN_USR;
|