들어가며
인덱스는 어렴풋이 개념과 사용방법 정도만 알고 있었는데, 이번에 발표를 준비하면서 자세히 알아보게 됐다.
이 글에서는 인덱스에 대해 간단히 알아보고 분류한 뒤 가장 일반적으로 사용되는 B-Tree Index에 대해 정리하겠다.
인덱스란?
인덱스는 쿼리의 성능에서 빼놓고 생각할 수 없는 개념이다.
인덱스에 대해 간단히 알아보자.
특징
컬럼의 값을 key, 레코드가 저장된 주소를 value로 하는 쌍으로 저장되며, 항상 정렬된 상태로 유지된다.
정렬된 상태로 유지해야 하기 때문에 INSERT, UPDATE, DELETE에 많은 비용이 들지만, SELECT 작업 속도를 높이기 위해 사용된다.
즉 인덱스는 저장 성능을 얼만큼 희생하여 읽기 속도를 높이는 방법이므로, 사용에 있어 주의해야 한다.
인덱스를 사용한다고 해서 쿼리의 성능이 무조건적으로 향상되는 것이 아니라는 점 또한 같은 맥락으로 생각할 수 있다.
인덱스의 구분
역할별 구분
(1) Primary Key
레코드를 대표하는 컬럼의 값으로 만들어진 인덱스를 의미한다. 식별자라고도 한다.
Null이 될 수 없고, 중복도 허용하지 않는다는 특징이 있다.
(2) Secondary Index
Primary Key를 제외한 나머지 인덱스를 Secondary Index로 분류한다.
(2)-1. Unique Index
Primary Key와 성격이 비슷하고 Primary Key를 대체해 사용할 수도 있다고 해서 대체 키라고 한다.
Secondary Index와 구분해 사용하는 경우도 있지만 Secondary Index에 포함되기도 한다.
저장방식별 구분
(1) B-Tree Index
가장 일반적으로 사용되는 방식이다.
column의 값을 변경하지 않고 원래 값 그대로를 이용해 인덱싱한다.
B-Tree Index를 응용한 R-Tree Index도 있으며, R-Tree Index는 위치기반 검색을 지원한다.
(2) Hash Index
column의 값으로 해시값을 계산하여 인덱싱한다. 즉 column 값에 변경이 가해지는 것이다.
columns 값이 변경되므로, 값의 일부분 일치 조건이나 범위로 검색하는 조건일 경우 Index를 사용할 수 없다.
주로 메모리기반 Database에서 사용된다.
(3) Fractal-Tree Index, Merge-Tree Index 등
중복허용여부에 따른 구분
(1) Unique Index
값의 중복을 허용하지 않는다.
(2) Non-Unique Index
값의 중복을 허용한다.
이 구분의 경우 매우 단순한 구분이지만, DBMS에서 쿼리를 실행하는 '옵티마이저'에게는 매우 중요한 문제이다.
조건을 만족하는 값을 하나 찾았을 때 탐색을 계속할 것인지 끝낼 것인지를 알려주는 효과가 있기 때문이다.
기능별 구분
(1) 전문 검색용
(2) 공간 검색용
여기까지 인덱스에 관한 일반적인 내용에 대해 정리했다.
이 구분은 real MySQL 도서에서 참고하였으며, Index를 분류하여 개념을 이해할 때 도움이 될 것이다.
'MySQL' 카테고리의 다른 글
| B-Tree Index (4) (0) | 2022.03.25 |
|---|---|
| B-Tree Index (3) (0) | 2022.03.24 |
| B-Tree Index (2) (0) | 2022.03.23 |
| B-Tree Index (1) (0) | 2022.03.23 |