DBMS는 일반적으로 B Tree (Balanced Tree) 인덱스를 사용한다.
인덱스 탐색과정은 수직적탐색 + 수평정탐색 두 단계로 이뤄진다.
인덱스 튜닝방법의 핵심요소는 두 가지이다.
인덱스 스캔 효율화 튜닝과 랜덤 액세스 튜닝 둘 다 중요하지만, 더 중요한 하나를 고른다면 랜덤 액세스 최소화 튜닝이다. 성능에 미치는 영향이 더 크기 때문이다.
SQL 튜닝은 랜덤I/O와의 전쟁이다.
인덱스는 대용량 테이블에서 필요한 데이터만 빠르게 액세스하기 위해 사용하는 오브젝트다.
인덱스 없이 데이터를 검색하려면, 테이블을 처음부터 끝까지 Full Scan해야한다. 반면, 인덱스를 이용하면 일부만 읽고 멈출 수 있다. 즉, Range Scan이 가능하다. Range Scan이 가능한 이유는 인덱스가 B-Tree 구조로 정렬돼 있기 때문이다.
정렬된 인덱스 레코드 중 조건을 만족하는 첫 번째 레코드를 찾는 과정이다. 즉, 인덱스 스캔 시작지점을 찾는 과정이다.
Root 블록 -> Branch 블록 -> Leaf블록
수직적 탐색을 통해 스캔시작점을 찾았으면, 찾으려는 데이터가 더 이상 안나올때 까지 인덱스 리프블록을 수평적으로 스캔한다. 인덱스에서 본격적으로 데이터를 찾는 과정이다.
인덱스를 수평적으로 탐색하는 이유는
필요한 컬럼을 인덱스가 모두 갖고 있으면 인덱스만 스캔하고 끝나지만, 일반적으로 인덱스를 스캔하고 얻은 ROWID로 테이블도 액세스한다.