목록오라클 (59)
정미나닷컴
* Cluster : (함께 자라거나 나타나는) 무리, (조밀하게 모여 있는 사람동물 등의) 무리 그럼 Index Cluster Table은 인덱스 별로 모여있는 테이블(?) 정도로 이해하면 되려나.. 일단 클러스터는 DB Object 개념의 하나이다. 일반적으로 우리가 알고 있는 구조가 [테이블] ↔ [인덱스] 분리형이고 IOT가 [테이블=인덱스] 일체형이라고 한다면 인덱스 클러스터 테이블은 이 둘의 중간쯤이라고 생각하면 되겠다. 백문이 불여일견이므로 일단 직접 만들어보면서 이 놈이 어떻게 생겨먹은 놈인지 알아보도록 하자. ① 데이터를 저장할 클러스터를 생성한다.CREATE CLUSTER C_DEPTNO (DEPTNO NUMBER(2)) INDEX;: 클러스터의 이름을 C_DEPTNO로 정하고 인덱스로..
SELECT * FROM ORD E WHERE ORD_DT='20120112' AND BRANCH_CD='BR00000199';위와 같은 쿼리가 있을 때 ORD 테이블이 [ORD_DT+BRANCH_CD] 컬럼으로 이루어진 결합인덱스를 갖고 있다면 정말 Perfect 하겠지만 ORD_X01 > ORD_DT ORD_X02 > BRANCH_CD 이렇게 각각의 단일 인덱스만을 갖고 있다면 우리는 둘 중 어떤 인덱스를 타게 하는 것이 좋을지 고민하지 않을 수 없다. (물론 대부분의 경우 그냥 옵티마이저의 판단에 맡길테지만..) 이런 경우 Index Combine을 사용하면 고민할 필요 없이 두 개의 인덱스를 모두 사용할 수 있다.SELECT /*+ index_combine(e ord_x01 ord_x02) */ ..
2012년 1월에 팔린 상품의 일별 상품별 판매수량과 판매금액 및 각각의 랭킹을 구하고 일별, 월별 총계 구하기 * 결과값::: * 쿼리1SELECT CASE WHEN GROUPING(O.ORD_DT)=1 AND GROUPING(I.ITEM_ID)=1 THEN '201201' ELSE O.ORD_DT END ORD_DT, I.ITEM_ID, CASE WHEN GROUPING(O.ORD_DT)=1 AND GROUPING(I.ITEM_ID)=1 THEN '합계' WHEN GROUPING(I.ITEM_ID)=1 THEN '소계' ELSE I.ITEM_NM END ITEM_NM, SUM(O.ORD_ITEM_QTY) QTY, SUM(O.ORD_ITEM_QTY*P.PRICE) PRICE, CASE WHEN GROU..
1. 오라클 다운로드 및 설치 http://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html > OS 환경에 맞는 파일 선택, 다운로드 > DISK1 > setup.exe * 관리자 계정의 패스워드이므로 기억해놓아야 함 ※ ORA-12953: The request exceeds the maximum allowed database size of 11 GB > 오라클 express 버전은 최대 용량이 11GB로 제한되어있는 관계로 큰 용량의 dump data를 밀어넣고 싶다면 enterprise 버전을 설치해야 함 2. SQL-Developer 다운로드 http://www.oracle.co..
Prefetch - 디스크 블록을 읽을 때 곧이어 읽을 가능성이 높은 블록을 미리 읽어오는 기능 - 한번에 여러개 Single Block I/O를 병렬 방식으로 동시 수행 * Multi Block I/O가 한 익스텐트에 속한 인접한 블록들을 한꺼번에 읽는 방식이라면 Prefetch는 멀리 떨어져있는 블록들을 한꺼번에 읽는 방식 (서로 다른 익스텐트에 위치한 블록을 배치 방식으로 미리 적재) * db file parallel read 대기 이벤트로 측정 Sequential 액세스 성능 향상 - Multiblock I/O, 인덱스 Prefetch Random 액세스 성능 향상 - 버퍼 Pinning, 테이블 Prefetch 인덱스 Prefetch - Branch Block에서 앞으로 읽게 될 Leaf Blo..
조건절 이행- 『(A = B) 이고 (B = C) 이면 (A = C) 이다』는 추론을 통해 새로운 조건절을 내부적으로 생성해 주는 쿼리변환- 『(A > B) 이고 (B > C) 이면 (A > C) 이다』와 같은 추론도 가능- A 테이블에 사용된 필터 조건이 JOIN 조건절을 타고 반대편 B 테이블에 대한 필터 조건으로 이행- 한 테이블 내에서도 두 컬럼간 관계정보를 이용해 조건절 이행SELECT * FROM MINA.DEPT D, MINA.EMP E WHERE E.JOB = 'MANAGER' AND E.DEPT_NO = '10' AND D.DEPT_NO = E.DEPT_NO;-------------------------------------------------------------------------..
조건절 Pushing - 뷰를 참조하는 쿼리 블록의 조건절을 뷰 쿼리 블록 안으로 Pushing하는 기능(옵티마이저가 어떤 이유에서 뷰 Merging에 실패했을 때 2차적으로 시도) 조건절 (Predicate) Pushdown- 쿼리 블록 밖에 있는 조건들을 쿼리 블록 안쪽으로 밀어 넣음SELECT DEPTNO, AVG_SAL FROM (SELECT DEPTNO, AVG(SAL) AVG_SAL FROM EMP GROUP BY DEPTNO) A WHERE DETPNO = 30;Execution Plan-------------------------------------------------------------------------------- 0 SELECT STATEMENT Optimizer=ALL_RO..
☑ 쿼리 변환이란?뷰 MergingSELECT * FROM (SELECT * FROM EMP WHERE JOB = 'SALESMAN') A,(SELECT * FROM DEPT WHERE LOC = 'CHICAGO') BWHERE A.DEPTNO = B.DEPTNO;▼SELECT * FROM EMP A, DEPT BWHERE A.DEPTNO = B.DEPTNO AND A.JOB = 'SALESMAN' AND B.LOC = 'CHICAGO';- 뷰 Merging을 통해 옵티마이저는 더 다양한 access 경로를 조사 대상으로 삼게 됨 단순 뷰(Simple View) Merging- 단순 뷰 : 조건절과 JOIN문만을 포함, no_merge 힌트를 사용하지 않는 한 언제든 Merging 발생-- 조건절 하나만..