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
반응형
'데이터베이스 > 데이터베이스 공부' 카테고리의 다른 글
조인수행원리(NL Join, Sort Merge Join, Hash Join) (0) | 2022.09.01 |
---|---|
[데이터베이스] 전체 테이블 스캔과 인덱스 스캔 (0) | 2022.09.01 |
SQL 처리 흐름도(SQL 처리 흐름도 구성, 조인 순서, 조인 기법, 액세스 기법, 일량) (0) | 2022.09.01 |
데이터베이스 실행계획(실행계획 구성요소, 조인 순서, 조인 기법, 액세스 기법, 최적화 정보, 연산, 실행계획 읽는 순서) (0) | 2022.09.01 |
옵티마이저(규칙기반 옵티마이저, 비용기반 옵티마이저) (0) | 2022.09.01 |