2.1 인덱스 구조 및 탐색

wesley·2022년 9월 18일

친절한SQL튜닝

목록 보기
5/6

2.1 인덱스 구조 및 탐색

DBMS는 일반적으로 B Tree (Balanced Tree) 인덱스를 사용한다.
인덱스 탐색과정은 수직적탐색 + 수평정탐색 두 단계로 이뤄진다.

인덱스 튜닝 핵심요소

인덱스 튜닝방법의 핵심요소는 두 가지이다.

  1. 인덱스 스캔과정에서 발생하는 비효율을 줄이는것 -> 인덱스 스캔 효율화 튜닝
  2. 테이블 액세스 횟수를 줄이는것 -> 랜덤 액세스 최소화 튜닝

인덱스 스캔 효율화 튜닝과 랜덤 액세스 튜닝 둘 다 중요하지만, 더 중요한 하나를 고른다면 랜덤 액세스 최소화 튜닝이다. 성능에 미치는 영향이 더 크기 때문이다.
SQL 튜닝은 랜덤I/O와의 전쟁이다.

인덱스 구조

인덱스는 대용량 테이블에서 필요한 데이터만 빠르게 액세스하기 위해 사용하는 오브젝트다.
인덱스 없이 데이터를 검색하려면, 테이블을 처음부터 끝까지 Full Scan해야한다. 반면, 인덱스를 이용하면 일부만 읽고 멈출 수 있다. 즉, Range Scan이 가능하다. Range Scan이 가능한 이유는 인덱스가 B-Tree 구조로 정렬돼 있기 때문이다.

인덱스 수직적 탐색

정렬된 인덱스 레코드 중 조건을 만족하는 첫 번째 레코드를 찾는 과정이다. 즉, 인덱스 스캔 시작지점을 찾는 과정이다.
Root 블록 -> Branch 블록 -> Leaf블록

인덱스 수평적 탐색

수직적 탐색을 통해 스캔시작점을 찾았으면, 찾으려는 데이터가 더 이상 안나올때 까지 인덱스 리프블록을 수평적으로 스캔한다. 인덱스에서 본격적으로 데이터를 찾는 과정이다.

인덱스를 수평적으로 탐색하는 이유는

  • 조건절을 만족하는 데이터를 모두 찾기 위해서이고
  • ROWID를 얻기 위해서다.

필요한 컬럼을 인덱스가 모두 갖고 있으면 인덱스만 스캔하고 끝나지만, 일반적으로 인덱스를 스캔하고 얻은 ROWID로 테이블도 액세스한다.

profile
공부기록방

0개의 댓글