DB

Index 1) 인덱스 구조

나리사리 2023. 10. 24. 16:05

1. 인덱스 기본 

특징

- 인덱스는 DBMS 마다 저장방식, 구조, 탐색 알고리즘이 조금씩 다르지만 일반적으로 B*Tree의 자료구조형을 가진다.

- 보통의 경우에 Root부터 Leaf까지 3단계를 지니지만 2단계 구조도 거칠 경우가 있다.

- 루트에서 리프 블록까지의 거리를 인덱스 깊이라고 부르며, 반복 탐색할 때 성능에 영향을 끼친다.

- 루 트와 브랜치 블록은 각 하위 노드들의 데이터 값 범위를 나타내는 키 값과, 그 키 값에 해당하는 블록을 찾는 데 필요한 주소 정보를 가진다.

- 리프 블록은 인덱스 키 값과, 그 키 값에 매칭되는 테이블 레코드를 찾아가는 데 필요한 주소 정보(ROIWD)를 가진다. 키 값이 같을 때는 ROWID 순으로 정렬이 된다.

- 리프 블록선형으로 이루어져 있어 ASC, DESC 상관없이 양방향 연결 리스트 구조로 되어있다.

 

NULL 주의사항

- Oracle에서 인덱스 구성 컬럼이 모두 NULL인 레코드는 인덱스에 저장하지 않는다.

- SQL Server는 인덱스 구성 컬럼이 모두 NULL인 레코드도 인덱스에 저장한다.

- NULL 값을 Oracle은 맨 뒤에 저장, SQL Server는 맨 앞에 저장한다.

- DBMS마다 NULL값 처리가 다르기 때문에 인덱스를 설계 또는 SQL을 작성할 경우에 숙지해야 한다.


2. 인덱스 탐색 

- 탐색 과정을 살펴보기 앞서 B*Tree의 구조를 다시금 보면, Root에서 부터 아래로 화살표가 향해있는 수직적 탐색

  하단의 Leaf 블록에서 옆으로 화살표가 되어 있는 수평적 탐색을 볼 수 있다.

- 수직적 탐색은 수평적 탐색을 위한 시작 지점을 찾는 과정이며, Root에서 Leaf 블록까지 아래로 진행하기에 수직적 탐색

  이다.

- 수평적 탐색은 인덱스 리프 블록에 저장된 레코드 마다의 연결 순서에 따라 좌 -> 우, 우->좌로 스캔하기에 수평적 탐색

  이다.