티스토리 뷰
인덱스 (Index)
: 데이터베이스 테이블에 대한 검색 속도를 향상시켜주는 자료구조
RDBMS에서 사용, 자주 사용하는 칼럼에 대해 인덱스 관리를 하여 별도의 저장 공간이 필요함
사용자가 생성하고 시스템에 의해 자동 관리됨
정렬된 상태이기 때문에 index range scan을 통해 full scan보다 빠르게 데이터에 접근함
해시테이블 / B트리로 주로 구현함
인덱스가 사용되는 칼럼
- 삽입, 삭제, 갱신이 적음
- 정수형
- 데이터의 중복도가 낮음 (분포도가 좋음)
- 검색, join 등이 자주 발생함
- 규모가 큰 테이블
자주 삽입, 삭제, 갱신되는 필드에는 인덱스를 정의하지 않는 것이 좋음
- Insert: 새로운 데이터에 인덱스를 추가해야 함
- Delete: 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행해야 함
- Update: 기존의 인덱스를 사용하지 않음 처리하고 갱신된 데이터에 대해 인덱스를 추가해야 함
대량의 데이터 삽입 시 [인덱스 삭제] -> [삽입 연산] -> [인덱스 생성] 이 효율적
NULL값에 대해서는 인덱스가 사용되지 않음
분포도 (Selectivity)
분포도가 좋다 = 데이터 종류가 다양함, 분포도가 낮을수록 좋음
인덱스로 적정한 분포도는 10~15% 이하
인덱스의 종류
키에 따른 인덱스
Primary Index (기본 인덱스)
기본키를 포함하는 인덱스
인덱스 키의 순서에 따라 데이터 정렬
Secondary Index (보조 인덱스)
기본 인덱스 이외의 인덱스
파일 조직에 따른 인덱스
Clustered Index (집중 인덱스)
인덱스 키의 순서에 따라 데이터 정렬
하나의 릴레이션에 하나의 인덱스만 생성 가능
insert, delete 연산이 많은 경우 인덱스 설정 부적절
Non-Clustered Index (비집중 인덱스)
인덱스의 키 값만 정렬, 실제 데이터는 정렬되지 않음
하나의 릴레이션에 여러 개의 인덱스 생성 가능
데이터 범위에 따른 인덱스
Dense Index (밀집 인덱스)
각 레코드에 대해 하나의 인덱스 엔트리가 만들어진 인덱스
접근시간은 더 빠르지만 많은 공간을 필요로 함
Sparse Index (희소 인덱스)
레코드 그룹 또는 데이터 블록에 대해 하나의 엔트리가 만들어지는 인덱스
갱신이 많은 경우 효율적
'Computer Science > Database' 카테고리의 다른 글
[Database] 분산 데이터베이스 (0) | 2022.09.04 |
---|---|
[Database] 병행 제어 (Concurrency Control) / 로킹 (Locking) (0) | 2022.09.03 |
[Database] 트랜잭션 격리 수준 / 고립도 (Isolation Level) (0) | 2022.09.03 |
[Database] 트랜잭션 회복 기법 (Recovery) (0) | 2022.09.03 |
[Database] 트랜잭션(Transaction) / ACID (0) | 2022.08.31 |