오라클(ORACLE) 강의 5

그룹 및 집계 함수

ROLL UP group by의 확장, 소계/총계 계산 select deptno, nvl(job,'null'), sum(sal) from emp group by rollup(deptno, job) order by 1,2; 10CLERK1300 10MANAGER2450 10PRESIDENT5000 10null8750 20ANALYST6000 20CLERK1900 20MANAGER2975 20null10875 30CLERK950 30MANAGER2850 30SALESMAN5600 30null9400 null null 29025 분석함수 하나의 행을 계산하는데 다른 행들의 데이터를 활용할 수 있다 Partition By group by와 동일한 역할 SELECT EMPNO, ENAME, SAL, DEPTNO,..

JOIN / 서브쿼리

Nested Loops Join 선행 테이블 결정 후 후행 테이블에 Loop 돌면서 join Physical IO(Disk→Buffer Cache→Read)가 Logical IO(Buffer Cache→Read)보다 cost가 크다 Oracle 11g부터는 NLJ Batch를 지원한다 Buffer Cache에 읽는 데이터를 먼저 읽어 NESTED LOOP를 수행하고, 없는 row id는 따로 저장해 다시 nested loop를 수행한다. 단, index된 데이터를 읽을 때 정렬이 깨진다는 단점이 있다. select d.deptno, d.dname, e.empno, e.ename, e.sal from cp_dept d, cp_emp e where d.deptno = e.deptno; ------------..

인덱스

B* 트리 - 노드가 넘치면(DBMS 기준으로 block에 데이터가 다 차면) 양쪽 형제 노드로 key를 분배. - 모든 형제노드가 full이면 위 아래 확장. - 자료는 리프노드에 저장되어있으며 모든 자료에서 루트까지 높이가 똑같다 - leaf node 좌우로 linkedlist로 연결되어있다 - 참고로 null은 자료가 저장되지 않으며 (대소비교가 불가능하기 때문에), 복합인덱스일 경우, 한 컬럼에만 값이 있어도 인덱스로 자료가 저장된다 Full Table Scan 많은 양의 데이터를 검색할 때 유용하다 High water Mark 아래의 모든 I/O를 다 읽는다 Multi Block I/O가 수행되며 한번에 읽는 양은 db_file_multiblock_read_count에 정의되어있다 이때 한 ex..

Optimizer / 실행 계획

Optimizer - SQL 실행계획 생성 - 가장 비용이 적게 드는 계획을 결정한다 - query 변형 / 예측 / 실행계획생성 Query 변형 - 기존에 작성된 SQL을 의미상 동일한 SQL로 재작성 가능하는 것이 좋을 지 결정 - OR 확장 -- 1) SELECT * FROM MEMBERS WHERE STATUS = 'ACTIVE' OR JOB = 'SWE' -- 2) SELECT * FROM MEMBERS WHERE STATUS = 'ACTIVE' UNION ALL SELECT * FROM MEMBERS WHERE STATUS = 'ACTIVE' AND JOB 'SWE' 첫번째 쿼리는 STATUS와 JOB에 INDEX가 있더라도 INDEX를 살리지 못함 - SU (SUBQUERY UNNEST) -..