Post List

2015년 1월 8일 목요일

대용량 데이터베이스 솔루션 1권 #16 VIEW

VIEW 의 구조



1. CREATE VIEW를 실행하면
   OBJ$ VIEW에 VIEW 개체를 하나 저장하고,
   COL$에 VIEW의 COLUMN 들의 정보를 저장하고,
   VIEW$에 VIEW 생성 SQL문의 SELECT 부분을 저장한다.

2. 해당 VIEW를 사용하는 SQL문이 실행되면
   그제서야 VIEW$의 SQL문을 가져와서 PARSING하여
   새로운 SQL문을 만들어서
   그것으로 실행계획을 수립하게 된다.

VIEW 의 특성

1. TABLE과 달리 물리적인 저장공간을 가지지 않음
   관련정보가 단지 DATA DICTIONARY에 저장될 뿐임

2. TABLE과 거의 동등하게 취급될 수 있는 논리적인 집합
   - SELECT : 제한없음
   - INSERT, DELETE, UPDATE : 경우에 따라 가능
   - INDEX, CLUSERING, HASH CLUSTER : 지정 불가
   - OBJECT PRIVILEGE : 부여 가능

3. 하나 이상의 TABLE로 VIEW를 생성 할 수 있음

4. 저장공간을 가지지 않으므로 정규화 규칙을 무시하고 목적에 따라 자유롭게 사용할 수 있음

5. 최종적으로는 TABLE을 ACCESS하게 됨

6. VIEW를 사용하는 것이 오히려 수행속도를 빠르게 하는 경우도 많이 있으나 사용에 따라 수행속도에 문제가 발생할 수 있음

7. VIEW 내에 변수를 지정할 수 없음

8. TABLE에 비해 특별히 수행속도를 저해하는 것은 없으며 OPTIMIZER에 의해 생성되는 수행경로에 영향을 받음

9. VIEW의 ACCESS 경로 생성원리를 숙지하여 잘 활용하면 양호한 수행속도를 보장 받을 수 있음

10. VIEW는 VIEW 내에 사용된 TABLE의 INDEX를 사용하게 되므로 INDEX COLUMN을 SQL FUNCTION으로 함부로 가공시키지 말 것

11. VIEW 내의 SELECT 문의 조건은 가능한 최적의 ACCESS 경로를 사용할 수 있도록 하거나 그럴 수 없다면 VIEW를 사용한 SQL의 WHERE 절에서는 반드시 양호한 ACCESS 경로가 되도록 할 것

VIEW의 활용

1. SECURITY
   VIEW에서 제공되지 않는 정보를 사용자는 볼 수가 없다.

- 보안등급에 맞추어 COLUMN 및 범위를 선정하고 PRIVILEGE를 부여
- 연산의 결과만 제공하고 알고리즘을 숨기기 위한 VIEW
- SELECT LIST를 FUNCTION으로 가공하여 UPDATE, INSERT, DELETE를 원천적으로 봉쇄하기 위한 VIEW
- TABLE의 명칭이나 COLUMN의 명칭을 감추기 위한 VIEW
- VIEW의 WHERE 조건에 권한을 지정 (SYSDATE, USER, TERMINAL)
   대표적인 예가 DATA DICTIONARY VIEW 들이다.
- TABLE을 생성시킨 USER를 감추기 위한 VIEW

2. 편의성
   자주 사용하는 JOIN을 미리 VIEW로 쉽게 쓸수 있도록 만든다.

- 검색조건의 단순화를 위한 VIEW
- EUC를 위한 COLUMN명, TABLE명을 한글화시킨 VIEW
- 자주 사용되는 JOIN 문장을 단순화시킨 VIEW
- 연산결과나 여러 COLUMN으로 판단된 값의 단순화를 위한 VIEW
- GROUP BY, ORDER BY, SUM(DECODE...) 처리를 위한 VIEW
- TREE 구조(BOM)의 전개를 제공하는 VIEW
- 정해진 조건을 VIEW에 미리 삽입하여 변수로 사용될 COLUMN만 조건을 부여하도록 단순화한 VIEW
- 마지막 일련번호를 찾거나 항상 역순으로 DATA를 추출하기 위한 VIEW

3. 수행속도 향상
   미리 Driving Table 조건을 강제로 VIEW로 생성

- 수행속도 향상을 위해 미리 튜닝한 SELECT문을 VIEW로 제공
- M:1 JOIN의 연결회수를 감소시키기 위해 먼저 GROUP BY된 VIEW를 만들고 그 VIEW와 JOIN을 일으키게 하기 위해 제공
- 특정 CLIENT TOOL의 문제해결을 위한 VIEW
- OUTER JOIN의 속도향상을 위한 VIEW
- 수행속도에 심한 영향을 주는 넓은 범위의 처리나 특정 COLUMN의 조건 검색을 막아 악성겸색을 방지하기 위한 VIEW
- 특정 절차로 수행시키기 위해 VIEW의 SELECT LIST에 SUPRESSING, HINT 등을 사용하는 VIEW
- JOIN 시 TABLE 들의 모든 COLUMN들을 JOIN 하는게 아니라 VIEW에 정의된 COLUMN들만을 JOIN 하기 위해 활용

CREATE VIEW EMP_DEPT
AS SELECT B.NAME, A.DEPTNO, A.EMPNO, A.ENAME
       WHERE ...;

SELECT ... FROM EMP_DEPT WHERE DEPTNO = :v1;

위의 경우 DEPTNO는 무조건 A의 DEPTNO에 대입되기 때문에 무조건 A Table 부터 Driving 된다.

4. 융통성 향상

- TABLE 변경(통합, 추가, 분할, 삭제), COLUMN명의 변경에 따라 이미 작성된 응용 프로그램에 영향을 주지 않기 위해 생성
- 업무의 규칙(Business rule)이 자주 변경되어 응용 프로그램의 수정이 많이 발생되는 경우를 해결하기 위한 VIEW
- 경우에 따라 ACCESS 경로를 다르게 하는 프로그램을 위한 VIEW
- SQL*PLUS를 이용한 REPORT 출력
- 서로 다른 TABLE의 COLUMN명을 통합하기 위해 사용하는 VIEW
- ARC 관계에 있는 TABLE들의 OBJECT 명칭을 통합하는 VIEW

5. SQL 기능 향상

- 불규칙적인 SORT가 필요한 경우
- GROUP BY 결과를 다시 가공하고자 하는 경우
- 서로 다른 TABLE의 GROUP BY 결과를 가은 줄에 맞추려는 경우
- ROWNUM을 이용한 특별한 처리
- 각 ROW에 있는 값들(예: 일자) 간에 가공처리 (예: 기간산정)
- 각각의 소계와 그 내역을 하나의 SQL로 처리
- 복잡한 OUTER JOIN의 해결을 위한 VIEW
- TABLE은 ROW를 가지지 않으나 VIEW는 ROW를 가지도록 한 VIEW
- SQL*Forms 의 EXCUTE_QUERY를 활용하기 위한 VIEW
- 기타 SQL의 기능 확장을 위해 원하는 임의의 집합이 필요한 경우

작가
이화식
출판
엔코아컨설팅
발매
1996.03.01
평점
블로거의 오늘의 책에 참여한 포스트 입니다