database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 39204 게시물 읽기
No. 39204
대량의 데이터를 뷰로 만들어도 될까요 ?
작성자
윤명철(nidty)
작성일
2012-01-04 20:03
조회수
5,313

계속적으로 대량의 데이터가 싸이는 테이블을 기반으로

계층구조 쿼리로 풀어서 뷰를 보여주고 있습니다.

제가 뷰에대한 개념이 부족해서

이렇게 됬을경우 개발단계에는 데이터량이 적어서 문제가 없는데

데이터가 계속적으로 싸여 늘어났을경우

이뷰가 참조하지 못할만큼 느려질까 걱정됩니다.

한달에 약 천건씩 쌓일것 같습니다.

근데 계층구조로 풀기때문에 뷰 조회시 약 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;
 

이 글에 대한 댓글이 총 3건 있습니다.

월 1000건 데이터를 가지고 크게 신경쓰실 필요는 없어보입니다만

해당 뷰를 타 테이블과의 조인등을 통해서 조회할때 성능향상이 필요할수는 있겠네요.

해당 테이블의 데이터가 갱신(INSERT, UPDATE, DELETE) 이 빈번하지 않다면

M-VIEW 를 사용하는것도 하나의 방법이 될수 있겠네요

 

1님이 2012-01-05 10:38에 작성한 댓글입니다. Edit

답변 감사합니다.

아직 실력이 없어.

성능향상에 대한건 꿈도 못꿉니다.

윤명철(nidty)님이 2012-01-06 14:06에 작성한 댓글입니다.

 

vw 의 주의점을 생각해 봅니다.

- 조인 대상에서 predicate 인해 Query Transformation

- Hint 사용시 주의

- View를 사용하는 쿼리가 복잡할 수록 튜닝이 어렵다

 

박광일(tohappy)님이 2012-01-09 18:51에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39207일자별 현황을 가로로 출력 하고 싶은데 감이 안오네요 ㅠㅠ [2]
박광일
2012-01-06
4534
39206오라클 접속 시 에러(ora-12710) [3]
순이
2012-01-06
4537
39205ERWin 툴 사용 [1]
금봉훈
2012-01-05
3689
39204대량의 데이터를 뷰로 만들어도 될까요 ? [3]
윤명철
2012-01-04
5313
39203데이터 베이스 스크립트로 생성 법줌 알려주세요 ㅜㅜ [1]
한근희
2012-01-03
3497
39202update 쿼리 질문입니다. 도와주세요!! [1]
박용선
2012-01-03
4804
39201날짜 계산질문드립니다.. [1]
추평사
2012-01-03
4399
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다