데이터베이스/데이터베이스 공부

인덱스(인덱스 특징, 인덱스 종류, B-트리 인덱스, 클러스터형 인덱스)

아밍나 2022. 9. 1. 22:39
728x90

인덱스

원하는 데이터를 쉽게 찾을 수 있게 돕는 책의 찾아보기와 유사한 개념으로, 테이블을 기반으로 선택적으로 생성할 수 있는 구조임.

→ 인덱스를 생성하지 않아도 되고 여러 개를 생성해도 된다.

  • 목적: 검색 성능의 최적화
  • DML(INSERT, UPDATE, DELETE 등) 작업은 테이블과 인덱스를 함께 변경해야 하기 때문에 오히려 느려질 수 있다는 단점이 존재.

인덱스 종류

  • ORACLE의 트리기반 인덱스: B-트리 인덱스, 비트맵 인덱스(Bitmap Index), 리버스 키 인덱스(Reverse Key Index), 함수 기반 인덱스(FBI, Function-Based Index) 등
  • SQL Server의 인덱스: 저장 구조에 따라 클러스터형(clustered) 인덱스, 비클러스터형(nonclustered) 인덱스

1) B-트리 인덱스(트리 기반 인덱스)

브랜치 블록(Branch Block)과 리프 블록(Leaf Block)으로 구성.

브랜치 블록

분기를 목적으로 하는 블록.
  • 다음 단계의 블록을 가리키는 포인터를 가지고 있다.

리프 블록

트리의 가장 아래 단계에 존재하는 블록.
  • 리프 블록은 인덱스를 구성하는 칼럼의 데이터와 해당 데이터를 가지고 있는 행의 위치를 가리키는 레코드 식별자(RID, Record Identifier/Rowid)로 구성되어 있다.
    • 인덱스 데이터는 인덱스를 구성하는 칼럼의 값으로 정렬된다. 
    • 만약 인덱스 데이터의 값이 동일하면 레코드 식별자의 순서로 저장된다.
  • 리프 블록은 양방향 링크(Double Link)를 가지고 있다.
    • 오름차순, 내림차순 검색을 쉽게 할 수 있음.

+) B-트리 인덱스는 일치(Exact Match) 검색과 범위(Range) 검색 모두에 적합한 구조이다.

더보기
- 일치(Exact Match) 검색
: '='로 검색
- 범위(Range) 검색
: 'BETWEEN', '>' 등과 같은 연산자로 검색

2) 클러스터형 인덱스(SQL Server)

첫째, 인덱스의 리프 페이지가 곧 데이터 페이지이다.

  • 테이블 탐색에 필요한 레코드 식별자가 리프 페이지에 없다.
    • 인덱스 키 칼럼과 나머지 칼럼을 리프 페이지에 같이 저장하기 때문에 테이블을 랜덤 엑세스 할 필요가 없다.
  • 클러스터형 인덱스의 리프 페이지를 탐색하면 해당 테이블의 모든 칼럼 값을 곧바로 얻을 수 있다.
둘째, 리프 페이지의 모든 로우(=데이터)는
인덱스 키 칼럼 순으로 물리적으로 정렬되어 저장된다.

  • 테이블 로우는 물리적으로 한 가지 순서로만 정렬될 수 있다.
    • 그러므로 클러스터형 인덱스는 테이블 당 한 개만 생성할 수 있다.

클러스터형 인덱스는 리프 블록에 인덱스 키 칼럼 외에도 테이블의 나머지 칼럼이 모두 함께 있다.

728x90
반응형