분류 전체보기
-
-
SQL 공유 및 재사용데이터베이스 2021. 6. 22. 22:08
소프트파싱/하드파싱 바인드 변수 사용 애플리케이션 커서 캐싱 Static SQL 과 Dynamic SQL 1. 소프트 파싱 vs. 하드파싱 시스템 공유 메모리에서 SQL 과 실행계획이 캐싱되는 영역을 오라클에선 라이브러리 캐시, SQL 서버에서는 프로시져 캐시라도 부른다. 사용자가 SQL 을 실행하면 제일 먼저 SQL 파서가 SQL 문장에 문법적 오류가 없는지를 검사한다.(Syntax검사) 문법적으로 오류가 없으면 의미상 오류가 없는지는 검사한다.(Semantic 검사) 예를 들어 존재하지 않거나 권한이 없는 객체를 사용했는지, 또는 존재하지 않는 컬럼을 사용했는지 등을 검사한다. 이런 검사를 마치면 사용자가 발행한 SQL 과 그 실행계획이 라이브러리 캐시에 캐싱됐는지를 확인한다. 만약 캐싱돼 있다면, ..
-
옵티마이저데이터베이스 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번 소트 단계를 거치지 않고 곧바로 조인할 수도 있다. 오라클은 조인 ..