도서(Book)/친절한 SQL 튜닝

2. 인덱스 기본 - a. 인덱스 구조 및 탐색

먹보 개발자 2024. 11. 8. 11:44

인덱스에 대해 제대로 알아야 한다. 인덱스 탐색 과정은 수직적 탐색과 수평적 탐색. 두 단계로 이루어진다.

 

2.1.1 미리 보는 인덱스 튜닝

데이터를 찾는 두 가지 방법

1. 데이블 전체를 스캔한다.

2. 인덱스를 이용한다.

 

인덱스 튜닝의 두 가지 핵심 요소

인덱스는 큰 테이블에서 소량의 데이터를 검색할 때 사용한다. 특히 OLTP에서.

1. 인덱스 스캔 효율화 튜닝

2. 랜덤 액세스 최소화 튜닝 - 더 중요

SQL 튜닝은 랜덤 I/O와의 전쟁이다.

 

2.1.2 인덱스 구조

인덱스는 범위 스캔이 가능하다

DBMS는 일반적으로 B*Tree 인덱슬ㄹ 사용한다.

ROWID = 데이터 블록 주소 + 로우 번호

  • 데이터 블록 주소 = 데이터 파일 번호 + 블록 번호
  • 블록 번호 : 데이터 파일 내에서 부여한 상대적 순번
  • 로우 번호 : 블록 내 순번
  • 수직적 탐색 : 인덱스 스캔 시작지점을 찾는 과정
  • 수평적 탐색 : 데이터를 찾는 과정

2.1.3 인덱스 수직적 탐색

인덱스 스캔 시작지점을 찾는 과정이다. 루트 블록에서 부터 시작하는데 루트를 포함해 브랜치 블록에 저장된 각 인덱스 레코드는 하위 블록에 대한 주소값을 갖는다. 루트에서 시작해 리프 블록까지 수직적 탐색이 가능한 이유다. 

수직적 탐색은 조건을 만족하는 레코드를 찾는 과정이 아니고 조건을 만족하는 첫번쨰 레코드를 찾는 과정이다.

 

2.1.4 인덱스 수평적 탐색

인덱스에서 본격적으로 데이터를 찾는 과정이다. 인덱스 리프 블록 끼리는 서로 앞 뒤 블록에 대한 주소값을 갖는다. 즉 양방향 연결 리스트 구조다. 

 

2.1.5 결합 인덱스 구조와 탐색

두개 이상 컬럼을 결합해서 인덱스를 만들 수도 있다. 하지만 중요한건 인덱스의 탐색 과정은 엑셀의 데이터 필터기능이 아니며 평면 구조가 아니다.