인덱스(Index)란?
데이터베이스에서 검색 성능을 향상시키기 위해 사용되는 데이터 구조
인덱스는 책의 색인처럼, 테이블의 데이터를 효율적으로 검색할 수 있도록 돕는 데이터 구조이다.
인덱스가 설정된 열을 기준으로 데이터를 빠르게 찾아갈 수 있어, 전체 테이블을 순차적으로 검색하지 않아도 된다.
예를 들어, 'Name'이 'HOLLY'인 데이터를 조회할 때, 'Name' 컬럼에 인덱스가 설정되어 있다면 전체 데이터를 비교할 필요 없이 빠르게 검색할 수 있습니다.
인덱스 장단점
인덱스 장점
- 빠른 데이터 검색
데이터를 빠르게 검색할 수 있어 조회 성능 향상. - 데이터 정렬
인덱스가 적용된 열에 대해 정렬된 데이터를 효율적으로 접근할 수 있음. - 고유성 보장
Primary Index, Unique Index 등의 사용을 통해 고유성을 보장할 수 있음.
인덱스 단점
- 디스크 공간 사용
인덱스에 대한 추가적인 디스크 공간이 필요 - 쓰기 성능 저하
데이터 삽입, 업데이트 삭제 작업 시 인덱스를 유지시켜야 하므로, 쓰기 작업의 성능이 저하될 수 있음 - 복잡한 관리
인덱스가 많아질수록 관리가 복잡. 또, 잘못 설계된 인덱스는 오히려 성능을 저하시킴.
인덱스 사용 시 고려사항
- 조회 쿼리가 얼마나 자주 사용되는가?
자주 조회되는 열에 대해 인덱스 생성 유리함. - 인덱스로 사용될 열의 데이터 분포는 어떻게 되어있는가?
중복값이 많지 않아야 함. 고유 값이 많은 열이 인덱스 생성에 적합함. - 테이블 크기는 어느정도인가?
인덱스가 설정되어 있지 않다면 순차적으로 데이터를 찾는다. 때문에 테이블이 클수록 인덱스의 효과가 큼. - 해당 테이블의 쓰기 빈도가 높은가?
인덱스의 단점으로 쓰기 성능 저하가 있음. 쓰기 빈도가 높다면 인덱스 사용을 신중히 고려해야함.
인덱스 구조와 유형
기본 구조 (B+Tree)
대부분의 SQL 데이터베이스 시스템에서 B+Tree 구조가 일반적으로 사용된다.
B+Tree 인덱스의 검색, 삽입, 삭제 연산은 O(log n)의 균형잡힌 시간 복잡도로 수행할 수 있기 때문이다.
때문에 대규모의 데이터를 관리할 때 유리하며, B+Tree 구조의 특성 상 범위 쿼리에 대해 성능이 뛰어나다.
또한 각 노드가 디스크 블록 크기에 맞춰 구성되어 있어 디스크 접근을 최소화할 수 있다.
인덱스 여러 구조와 유형
기본 인덱스 (Primary Index)
기본 키(Primary Key)에 의해 자동으로 생성되는 인덱스로, 각 테이블에 하나만 존재하며 고유성과 비어 있지 않은 값을 보장한다.
데이터의 고유성과 무결성을 보장하는 경우 사용된다.
고유 인덱스 (Unique Index)
특정 열에 대해 중복을 허용하지 않는 인덱스이다.
클러스터형 인덱스 (Clustered Index)
데이터가 인덱스 순서에 따라 물리적으로 정렬된 구조를 가진다.
각 테이블에 하나만 생성 가능하며 데이터 자체가 정렬되므로 빠른 검색이 가능하다.
비클러스터형 인덱스 (Non-Clustered Index)
데이터는 정렬되지 않고 인덱스는 데이터 위치를 참조하며, 한 테이블에 여러 개 생성할 수 있다.
복합 인덱스 (Composite Index)
여러 열을 결합해 하나의 인덱스를 생성한다.
예: (name, age) 와 같이 두 열에 대해 인덱스 생성
해시 인덱스 (Hash Index)
해시 함수를 사용하여 데이터를 검색하며, 등호(=) 검색에 최적화되어 있지만 범위 검색에는 적합하지 않다.
텍스트 인덱스 (Full-Text Index)
대량의 텍스트 데이터를 검색하는데 최적화된 인덱스로, 검색 엔진에서 특정 키워드를 빠르게 검색할 때 사용한다.
이 외에도 공간 인덱스(Spatial Index), 함수 기반 인덱스(Function-Based Index), 비트맵 인덱스(Bitmap Index), 범위 인덱스(BRIN;Block Range INdex) 등 다양한 유형의 인덱스가 있다.
'Computer Science > Database' 카테고리의 다른 글
저장 프로시저(Stored Procedure) - Oracle, MySQL 예시 (1) | 2024.11.30 |
---|---|
Redis (1) | 2024.11.27 |
이상현상(Anomaly) (0) | 2024.11.26 |
정규화 (0) | 2024.11.25 |
SQL과 NoSQL (2) | 2024.11.24 |