간단명료
4.4.1 서브쿼리 변환이 필요한 이유 최근 옵티마이저는 비용을 평가하고 실행계획을 생성하기에 앞서, 사용자로부터 전달받은 SQL을 최적화에 유리한 형태로 변환하는 작업, 쿼리변환부터 진행한다. 쿼리변환은 옵티마이저가 SQL을 분석해 같은 결과 집합을 생성하면서도 더 나은 성능이 기대되는 형태로 재작성하는 것을 말한다. 서브쿼리는 하나의 SQL문 안에 괄호로 묶은 별도의 쿼리 블록을 말한다. 인라인 뷰(Inline View) : FROM 절에 사용한 서브쿼리. 중첩된 서브쿼리(Nested Subquery) : WHERE 절에 사용한 서브쿼리. 메인쿼리 컬럼을 참조하는 형태를 상관관계 있는(Correlated) 서브쿼리 라고 부른다. 스칼라 서브쿼리(Scalar Subquery) : 한 레코드 당 정확히 ..
4.3.1 기본 메커니즘 Build 단계 : 작은 쪽 테이블(Build Input)을 읽어 해시 테이블(해시 맵)을 생성한다. Probe 단계 : 큰 쪽 테이블(Probe Input)을 읽어 해시 테이블을 탐색하면서 조인한다. select /*+ ordered use_hash(c) */ * from 사원 e, 고객 c where c.관리사원번호 = e.사원번호 and e.입사일자 >= '19960101' and e.부서코드 = 'Z123' and c.최종주문금액 >= 20000해시 조인은 use_hash 힌트로 유도하며 위 SQL에 사용한 힌트는 사원 테이블 기준으로(ORDERED) 고객 테이블과 조인할 때 해시 조인 방식을 사용하라(use_hash)고 지시하고 있다. Bui..
조인 컬럼에 인덱스가 없을 때 대량 데이터 조인이어서 인덱스가 효과가 없을 때 옵티마이저는 NL 조인 대신 소트 머지 조인이나 해시 조인을 선택한다. 해시 조인을 사용할 수 없는 상황에서 대량 데이터를 조인하고자 할 때 소트 머지 조인을 사용한다. 4.2.1 SGA vs. PGA 공유 메모리 영역인 SGA에 캐시된 데이터는 여러 프로세스가 공유할 수 있지만, 동시에 액세스는 불가능하다. 따라서 액세스를 직렬화하기 위한 Lock 메커니즘으로 래치(Latch)가 존재한다. 데이터 블록과 인덱스 블록을 캐싱하는 DB 버퍼캐시는 SGA의 가장 핵심적인 구성요소이먀, 여기서 블록을 읽으려면 버퍼 Lock도 얻어야 한다. (1.3.8 https://gyujingyujin.tistory.com/13?category=..
NL조인은 인덱스를 이용한 조인이다. 일반적으로 양쪽 테이블 다 인덱스를 사용하지만 OUTER 쪽 테이블은 사이즈가 크지 않다면 인덱스를 이용하지 않을 수 있다. INNER 쪽 테이블은 Table Full Scan 시 한 번으로 그치지 않기 때문에(OUTER에서 읽은 건수만 큼 Table Full Scan 함) 반드시 인덱스를 사용해야 한다. 4.1.1 기본 메커니즘 // for(i=0; i
3.4.1 인덱스 설계가 어려운 이유 인덱스가 많으면 다음과 같은 문제가 발생한다. DML 성능 저하 (-> TPS,Transaction Per Second 저하) 데이터베이스 사이즈 증가 (-> 디스크 공간 낭비) 데이터베이스 관리 및 운영 비용 상승 3.4.2 가장 중요한 두 가지 선택 기준 조건절에 항상 사용하거나, 자주 사용하는 컬럼을 선정한다. '=' 조건으로 자주 조회하는 컬럼을 앞쪽에 둔다. 3.4.3 스캔 효율성 이외의 판단 기준 그 외 고려할 판단 기준 수행 빈도 업무상 중요도 클러스터링 팩터 데이터량 DML 부하(= 기존 인덱스 개수, 초당 DML 발생량, 자주 갱신하는 컬럼 포함 여부 등) 저장 공간 인덱스 관리 비용 이런 다양한 판단 기준에 대한 해석이 서로 다르기 때문에 설계자의 ..