db에서는 일반적으로 원하는 데이터를 찾을 때, FTS(Full Table Scan) 즉 처음부터 끝까지 차례대로 탐색을 하게 된다.
이것을 좀더 효율적으로 데이터를 찾을 수 있게 자료구조를 통해 만든 목차를 인덱스 라고한다. 백과사전의 각 내용을 찾기 쉽게 가,나,다 순으로 내용들을 정렬해 둔 것과 마찬가지이다.
이러한 인덱스를 설계 > 관리 > 개선하는 과정을 인덱스튜닝 이라고 한다.
이해하기 쉽게 이야기해보자면
여기서 백과사전은 DB, 백과사전의 내용들은 데이터, 가,나,다 순으로 정렬한 것은 인덱스, 백과사전에 이런 정렬방식을 적용하고 개선하는것을 인덱스 튜닝이라고 할 수 있겠다.
인덱스를 생성하면, 데이터베이스는 특정 컬럼 값과 데이터가 저장된 물리적 위치(테이블의 레코드 위치)를 연결하는 별도의 데이터 구조를 생성한다.
이 인덱스 구조 덕분에 데이터 검색 시 테이블 전체를 스캔하지 않고, 필요한 데이터를 빠르게 찾아올 수 있다.
그럼 이런 인덱스는 자료구조로 구현하게 되는데 다음과 같다.
인덱스에 사용되는 자료구조
(1) B-Tree / B+ Tree
- 대부분의 관계형 데이터베이스에서 사용하는 자료구조.
- 데이터를 정렬된 형태로 유지하며, 검색, 삽입, 삭제가 효율적으로 수행됨.
- 특징:
- 균형 잡힌 트리 구조로, 검색 시간이 O(log N).
- 디스크 I/O를 최소화하도록 설계.
- B+ Tree는 리프 노드에 모든 데이터를 저장하여 순차 검색에도 유리.
(2) Hash Table
- 특정 데이터베이스(예: 메모리 기반 DB)에서 사용.
- 해시 함수로 키를 변환하여 데이터를 빠르게 찾음.
- 특징:
- 검색 시간이 평균적으로 O(1).
- 정렬이 필요 없는 단순 검색/삽입에 적합.
- 범위 검색에는 부적합.
(3) 기타 자료구조
- Bitmap Index: 값이 한정적인 컬럼(예: 성별, 상태 등)에 적합.
- R-Tree: 공간 데이터를 처리하기 위해 사용(예: GIS, 지도 데이터).
'데이터베이스' 카테고리의 다른 글
SELECT문 처리 우선순위 정리 (0) | 2024.11.17 |
---|---|
SQL문 간단 정리 (1) | 2024.11.14 |
동시성 제어 (0) | 2024.04.12 |
트랜잭션 (Transaction) (1) | 2024.04.09 |
스키마 (Schema) (0) | 2024.04.08 |