1. 옵티마이저 

[1] 옵티마이저

- 사용자가 질의한 SQL문에 대해 최적의 실행 방법을 결정하는 역할 수행

 

[2] 규칙기반 옵티마이저

- 우선순위를 가지고 실행계획을 생성한다.

- 우선순위가 높은 규칙이 적은 일량으로 해당 작업을 수행한다고 판단.

- 인덱스 유무와 SQL문에서 참조하는 객체등을 참고한다.

 

[3] 비용기반 옵티마이저

- 현재 대부분의 DB에서 사용한다.

- SQL문을 처리하는데 필요한 비용이 가장 적은 실행계획을 선택하는 방식이다.

- 비용이란 SQL문을 처리하기 위해 예상되는 소요시간 또는 자원 사용량을 의미한다.

- 테이블, 인덱스, 칼럼 등 다양한 객체 통계정보와 시스템 통계정보 등을 이용한다.

 

[4] 실행계획

- SQL에서 요구한 사항을 처리하기 위한 절차와 방법을 의미한다.

- 실행계획을 구성하는 요소에는 조인 순서, 조인 기법, 액세스 기법, 최적화 정보, 연산 등이 있다.

 

2. 인덱스 기본

[1] 인덱스

- 원하는 데이터를 쉽게 찾을 수 있도록 돕는 책의 찾아보기와 유사한 개념이다.

- 검색 성능의 최적화를 목적으로 두고 있지만 느려질 수 있다는 단점이 존재한다.

 

[2] B-TREE 인덱스에서 원하는 값을 찾는 과정

1. 브렌치 블록의 가장 왼쪽 값이 찾고자 하는 값보다 작거나 같으면 왼쪽 포인터로 이동

2. 찾고자 하는 값이 브랜치 블록의 값 사이에 존재하면 가운데 포인터로 이동

3. 오른쪽에 있는 값보다 크면 오른쪽 포인터로 이동

 

[3] 전체 테이블 스캔

- 테이블에 존재하는 모든 데이터를 읽어 가면서 조건에 맞으면 결과로써 추출하고 조건에 맞지 않으면 버리는 방식으로 검색한다.

 

[4] 전체 테이블 스캔을 하는 경우

1. SQL문에 조건이 존재하지 않는 경우

2. SQL문의 주어진 조건에 사용 가능한 인덱스가 존재하지 않는 경우

3. 옵티마이저의 취사선택

4. 병렬처리 방식으로 처리하는 경우 등

 

[5] 인덱스 스캔

- 인덱스를 구성하는 칼럼의 값을 기반으로 데이터를 추출하는 액세스 기법이다.

 

[6] 인덱스 유일 스캔

- 유일 인덱스를 사용하여 단 하나의 데이터를 추출하는 방식이다.

(중복 X, 구성 칼럼에 대해 모두 ‘=’로 값이 주어진 경우에만 가능)

 

[7] 인덱스 범위 스캔

- 인덱스를 이용하여 한 건 이상의 데이터를 추출하는 방식이다.

 

[8] 인덱스 역순 범위 스캔

- 인덱스의 리프 블록의 양방향 링크를 이용하여 내림차순으로 데이터를 읽는다.

 

3. 조인 수행원리

[1] NL Join

- 프로그래밍에서 사용하는 중첩된 반복문과 유사한 방식으로 조인을 수행, 랜덤 액세스 방식으로 데이터를 읽는다.

 

[2] Sort Merge Join

- 조인 칼럼을 기준으로 데이터를 정렬하여 조인을 수행, 스캔 방식으로 데이터 읽는다.

 

[3] Hash Join

- CPU 작업 위주로 처리한다.

- 해쉬 기법 이용하고 NL Join의 랜덤 액세스 문제와 SMJ의 정렬 작업 부담을 해결하기 위한 대안으로 등장했다.