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의 기능 확장을 위해 원하는 임의의 집합이 필요한 경우
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의 기능 확장을 위해 원하는 임의의 집합이 필요한 경우
댓글 없음:
댓글 쓰기