본문 바로가기

Computer Science/Database

SQLP 기초 - 3. 인덱스 구조 및 탐색

728x90

- 인덱스 탐색 과정은 수직적 탐색과 수평적 탐색 2단계로 이루어진다.

 

- OLTP(Online Transaction Processing)은 소량 데이터를 주로 검색하므로 인덱스 튜닝으로 속도를 빠르게 하는 것이 중요하다.

 

인덱스 튜닝의 핵심 요소

1. 인덱스 스캔 과정에서 발생하는 비효율 줄이는 것. 즉, 인덱스 스캔 효율화 튜닝

2. 테이블 엑세스 회수 최소화. 인덱스 스캔 후 테이블 레코드를 엑세스할 때 랜덤 I/O를 사용하므로 랜덤 엑세스 최소화 튜닝

인덱스 스캔 -> 랜덤 엑세스

- 랜덤 I/O를 줄여야 하는 것이 인덱스 튜닝의 핵심이다.

 

 

- B*Tree Index 구조(B = Balanced)


- RootBranch 블록에 있는 각 레코드는 하위 블록에 대한 주소값을 갖는다.

- Root와 Branch 블록에는 키값을 갖지 않는 특별한 레코드, LMC(Leftmost Child)가 있다.

- LMC는 자식 노드 중 맨 왼쪽 자식 노드를 가리킨다.

- Leaf 블록에는 테이블의 각 레코드를 가리키는 주소값(ROWID)를 갑는다. 인덱스 키값이 같은 경우 ROWID순으로 정렬된다.

- 인덱스 스캔의 목적은 검색 조건을 만족하는 소량의 데이터의 ROWID를 빠르게 얻는 것이다.

- ROWID = 데이터 블록 주소(DBA; Data Block Address) + 로우 번호

 

 

인덱스 탐색 과정

1. 수직적 탐색 : 인덱스 스캔 시작 지점 찾는 과정 = 조건을 만족하는 첫 번째 레코드를 찾는 과정  

2. 수평적 탐색 : 데이터를 찾는 과정

- Leaf 블록끼리 Double Linked List 구조(서로 앞뒤 블록에 대한 주소를 가지고 있는 구조)로 되어 있어 수평적 탐색이가능하다.

 

결합 인덱스 탐색 과정

- 결합 인덱스의 경우는 '성별 + 고객명'을 하나의 컬럼으로 여긴다고 보면 된다. 즉, 성별로 먼저 대상을 찾고 그 필터링된 대상에서 고객명으로 레코드를 찾는 것이 아니다.

- 인덱스 자체가 2개의 컬럼을 기준으로 이미 정렬되어 있기 때문에 컬럼 개수 만큼 탐색 단계가 존재한다고 착각해서는 안된다.

- 성별로 먼저 필터링하고 그 다음 고객명으로 대상을 찾는다는 의미는 수직적 스캔을 2번한다는 말과 같다. 즉, 결합 인덱스가 아니라 개별 인덱스를 2번 타는 것이라고 볼 수 있다.

 

 

 

728x90