[Database] 데이터베이스 index(인덱스) 알아보기
2024. 3. 2. 23:57ㆍ백엔드/Database
데이터베이스를 설계/운영할 때 데이터 조회 속도를 향상하기 위해 인덱싱을 사용하는데요!
이번 게시글에서는 데이터베이스의 인덱스란 무엇인지 또 이것의 장/단점은 무엇인지 알아보려고 합니다🔥
# 인덱스
- 데이터베이스에서 특정 컬럼에 대한 검색 성능을 향상하는 데 사용되는 데이터 구조
- 데이터베이스가 레코드를 검색할 때 전체 테이블을 스캔하는 대신 인덱스를 사용하여 더 빠른 검색이 가능
# 인덱싱
- 인덱싱은 인덱스를 생성하고 유지하는 프로세스
- 주로 검색 및 정렬 작업을 최적화하기 위해 사용
# 인덱싱의 장점과 단점
👍 장점
- 검색 속도 향상
: 데이터를 검색/조회하는 데 걸리는 시간이 줄어들어 효과적인 데이터 검색 작업 수행 - 정렬 속도 향상
: 데이터가 이미 정렬된 상태이기 때문에 이미 정렬된 상태의 데이터를 활용하여 효과적인 정렬 작업 수행 - 조인 성능 향상
: 인덱스된 열을 기준으로 조인을 수행할 때, 두 테이블 간의 매칭되는 행을 빠르게 찾아내어 조인 작업 수행
👎 단점
- 저장 공간 소비
- 추가적인 저장 공간이 필요하므로 데이터베이스의 크기가 증가
- 데이터를 Delete 하는 경우에도 데이터가 실제로 삭제되지 않고 사용하지 않는 데이터로 처리되기 때문에 인덱스 테이블의 크기가 기존 테이블의 크기보다 커지는 경우도 발생할 수 있음
- 갱신 비용
- 데이터의 삽입, 수정, 삭제 작업이 발생할 때마다 인덱스도 함께 갱신해야 하므로 데이터 변경 작업의 속도 저하
- 인덱스가 수정이 되면 인덱스의 자료구조인 B-Tree의 높이를 균형있게 조절하고 데이터를 효율적으로 조회할 수 있도록 분산시키는 추가 비용 발생
- 관리 비용
- 인덱스를 유지보수하고 최적화하는 추가적인 관리 비용이 발생
# 인덱스의 종류
간단하게 클러스터형과 세컨더리 인덱스에 대하여 알아보자
1. Clustered Index (클러스터형 인덱스)
- 데이터를 물리적으로 정렬하는 인덱스 (MySQL에서는 InnoDB 스토리지 엔진에서만 지원)
- 테이블당 하나의 클러스터형 인덱스 생성 가능
- 보통 테이블의 기본 키(primary key)에 생성되며, 기본 키가 정의되지 않은 경우 유니크한 열(unique key)에 대해 인덱스 생성 가능
2. Secondary Index (보조 인덱스)
- create index를 사용하여 세컨터리 인덱스 생성 가능
- 테이블의 데이터를 물리적으로 재정렬하지 않고, 별도로 정의된 인덱스를 통해 데이터에 대한 참조를 제공
- 테이블의 물리적인 순서와 인덱스의 순서가 다를 수 있음
- 테이블당 여러 개의 보조 인덱스 생성 가능
# 인덱스를 생성하는 방법
# 방법은 아주 간단하다. 아래 명령어를 실행해주면 끝.
CREATE INDEX 인덱스명 ON 테이블이름 (열1, 열2); -- 복합 인덱스 생성
🤔 인덱스는 B-Tree의 자료구조로 이루어져 있습니다. 그렇다면 B-Tree에 대해서도 알아볼까요?!
# B-Tree
- B-트리(B-Tree)는 이진 트리(Binary Tree)에서 발전한 자료 구조로, 모든 리프 노드(자식이 없는 노드)가 같은 레벨을 유지하여 자동으로 밸런스를 맞추는 트리
- 대용량 데이터를 효율적으로 저장하고 검색하는 데 사용
- 데이터가 정렬된 순서를 보장하므로 범위 검색에 유용
B-Tree에 대해서는 아래 Youtube 영상을 참고해 주시면 조금 더 쉽게 이해하실 수 있을 것 같습니다!
출처 : 쉬운코드 - (1부) B tree의 개념과 특징, 데이터 삽입이 어떻게 동작하는지를 설명합니다! (DB 인덱스과 관련 있는 자료 구조)
'백엔드 > Database' 카테고리의 다른 글
[Database] SubQuery 종류 (0) | 2024.07.14 |
---|