전체 글
-
옵티마이저데이터베이스 2021. 6. 21. 22:42
1. 옵티마이저 종류 1. 규칙기반 옵티마이저 Rule-Based Optimizer(RBO) 미리 정해 놓은 규칙에 따라 액세스 경로를 평가하고 실행계획을 선택한다. 여기서 규칙이란 액세스 경로별 우선순위로서, 인덱스 구조, 연산자, 조건절 형태가 순위를 결정짓는 주요인이다. 2. 비용기반 옵티마이저 Cost-Based Optimizer(CBO) 비용이란, 쿼리를 수행하는 데 소요되는 일량 또는 기산을 뜻한다. CBO 가 실행계획을 수립할 때 판단 기준이 되는 비용은 어디까지나 예상치다. 미리 구해놓은 테이블과 인덱스에 대한 여러 통계정보를 기초로 각 오퍼레이션 단계별 예상 비용을 산정하고, 이를 합산한 총비용이 가장 낮은 실행계획을 선택한다. 비용을 산정할 때 사용하는 오브젝트 통계 항목으로는 레코드 ..
-
고급 조인 기법데이터베이스 2021. 6. 20. 21:11
인라인뷰 활용 배타적 관계의 조인 부등호 조인 BETWEEN 조인 ROWID 활용 1. 인라인 뷰 활용 대부분 조인 1:M 관계인 테이블끼리의 조인이다. 조인 결과는 M 쪽 집합과 같은 단위가 된다. 이를 다시 1쪽 집합 단위로 그루핑해야 한다면, M 쪽 집합을 먼저 1쪽 단위로 그루핑하고 나서 조인하는 것이 유리하다. 조인 횟수를 줄여주기 때문인데, 그런 처리를 위해 인라인 뷰를 사용할 수 있다. 2009년도 상품별 판매수량과 판매금액을 집계하는 아래 쿼리를 예로 살펴보자. 일별상품판매 t1 (M) : 상품 t2 (1) select min(t2.상품명) 상품명, sum(t1.판매수량) 판매수량, sum(t1.판매금액) 판매금액 from 일별상품판매 t1, 상품 t2 where t1.판매일자 betwee..
-
스칼라 서브쿼리데이터베이스 2021. 6. 20. 21:05
쿼리에 내장된 또 다른 쿼리 블록을 서브 쿼리라고 하는데, 그 중에서 함수처럼 한 레코드당 정확히 하나의 값만 리턴하는 서브쿼리를 스칼라 서브 쿼리라고 한다. 주고 select-list 에서 사용되지만 몇 가지 예외상황을 뺀다면 컬럼이 올 수 있는 대부분의 위치에서 사용 가능하다. select empno, ename, sal, hiredate, (select d.dname from dept d where d.deptno=e.deptno) dname from emp e where sal>=2000; 스칼라 서브 쿼리를 사용한 위 쿼리 문장은 아래 Outer 조인문과 100% 같은 결과를 낸다. 즉 dept 와 조인에 실패하는 emp 레코드가 있다면 dname 으로 null 값이 출력된다. select /*..
-
-
해시 조인데이터베이스 2021. 6. 19. 19:33
1. 기본 매커니즘 해시조인은 둘 중 작은 집합(Build Input)을 읽어 해시 영역(Hash Area)에 해시 테이블(=해시 맵)을 생성하고, 반대쪽 큰 집합 (Probe Input)을 읽어 해시 테이블을 탐색하면서 조인하는 방식이다. select /*+ordered use_hash(e)*/ d.deptno, d.dname, e.empno, e.ename from dept d, emp e where d.deptno=e.deptno ------------------------------------- Execution Plan ------------------------------------- 0 SELECT STATEMENT Opimizer=CHOOSE (Cost=5 Card=654 Bytes=35K..
-
소트 머지 조인데이터베이스 2021. 6. 19. 19:03
NL 조인은 조인 컬럼을 선두로 갖는 인덱스가 있는지가 매우 중요하다. 만약 조인 컬럼을 선두로 갖는 인덱스가 없으면 Outer 테이블에서 읽히는 건마다 Innder 테이블 전체를 스캔하기 때문이다. 그럴 때 옵티마이저는 소트 머지 조인이나 해시 조인을 고려한다. 소트 머지 조인은 이름이 의미하는 것처럼 두 테이블을 각각 정렬한 다음에 두 집합을 머지(merge) 하면서 조인을 수행한다. 소트 머지 조인은 아래 두 단계로 진행된다. 1. 소트 단계 : 양쪽 집합을 조인 컬럼 기준으로 정렬한다. 2. 머지 단계 : 정렬된 양쪽 집합을 서로 merge 한다. 만약 조인 컬럼에 인덱스가 있으면(오라클의 경우 outer 테이블에만 해당), 1번 소트 단계를 거치지 않고 곧바로 조인할 수도 있다. 오라클은 조인 ..
-
-
NL 조인데이터베이스 2021. 6. 17. 21:31
1.기본 매커니즘 begin for outer in (select deptno,empno, rpad(ename,10) ename from emp ) loop --outer 루프 for inner in (select dname from dept where deptno=outer.deptno ) loop --inner 루프 dbms_output.put_line(outer.empno||':'||outer.ename||':'||inner.dname); end loop; end loop; end; 2. NL 조인 수행 과정 분석 select /*+ ordered use_nl(e) */ e.empno ,e.ename ,d.dname ,e.job ,e.sal where e.deptno = d.deptno ------..