DB 조회 성능 향상을 위한 기초적인 인덱스 전략 4가지가 있습니다
기본적으로 어떤 것이 있는지 한 번 살펴보도록 하겠습니다
B-Tree 인덱스
- 가장 기본적인 인덱스 구조로, 일반적인 RDBMS(Oracle, MySQL, PostgreSQL 등)에서 디폴트 인덱스 유형
- 값이 정렬된 키(key) 기반으로 검색하므로, 범위 조회나 정확한 매칭 검색에 강점
- 인덱스가 트리(Tree) 구조를 이루기 때문에, 검색이나 삽입, 삭제 작업의 평균 시간 복잡도가 O(logn) 수준을 유지
- 정확한 값 매칭이나 범위 검색에 많이 사용되며 대다수의 일반 쿼리에 가장 적합
Bitmap 인덱스
- 대용량의 데이터에서 특정 값(또는 값의 범위)을 빠르게 검색하도록 설계된 인덱스 구조
- 각 비트(bit)가 컬럼의 키 값 존재 여부(불리언 값)를 나타내며, 여러 데이터 레코드가 비트맵(bit map) 형태로 인덱스 내부에 매핑
- 같은 컬럼 값에 해당하는 데이터 행이 많을수록(카디널리티가 낮을수록), 비트맵 인덱스가 높은 성능을 발휘
- 저장 공간 측면에서 효율적이도록 설계
- 카디널리티가 낮은 컬럼이나 DML이 잦지않고, 읽기 위주의 DW나 OLAP 시스템에 적합
Function-based 인덱스
- 함수를 적용한 컬럼 값으로 인덱스를 생성하는 기법
- 인덱스 생성 시 함수가 적용된 결과를 미리 저장해 둠으로써, 쿼리 시 동일한 함수를 호출해 조건을 만족하는 레코드를 빠르게 찾도록 도움
- 일반 B-Tree 인덱스가 컬럼의 원본 값에만 적용되어, 함수 사용 시 인덱스를 못 타는 문제를 해결
- 쿼리에서 함수나 표현식을 자주 사용할 때 적합
Text 인덱스 (Full-Text Search Index)
- 대용량 텍스트 데이터에서 특정 단어, 구, 구문 등을 효율적으로 검색하기 위한 인덱스 구조
- RDBMS별로 MySQL의 FULLTEXT 인덱스, Oracle의 Oracle Text, PostgreSQL의 TSVector/TSQuery 등이 이에 해당
- 일반적인 B-Tree 인덱스로는 처리하기 힘든 자연어 분석(토큰화, 스테밍, 불용어 제거 등)을 수행
- 전문 검색(텍스트 필드 내 키워드 검색)에 적합
주로 사용하는 용도에 대해서만 간략하게 알아보았습니다
인덱스 전략은
데이터의 특성과 사용패턴에 따라 달라지기 때문에
직접 업무에 적용해보시면서 성능 변화를 측정해보시기 바랍니다
'Etc' 카테고리의 다른 글
JVM이 스택 기반 VM인 이유가 무엇일까? (0) | 2025.01.19 |
---|---|
웹훅이란? (0) | 2025.01.12 |
DB 인덱싱 전략 (0) | 2025.01.05 |
멀티 모듈을 사용하는 이유 (0) | 2024.12.29 |
병렬처리가 효과적인 경우 (0) | 2024.12.22 |