Index
데이터베이스 인덱스(Index)란?
데이터베이스에서 데이터를 빠르게 검색할 수 있도록 지원하는 자료구조로, 테이블의 데이터 검색 성능을 향상시키는 역할을 한다.
인덱스는 주로 B-tree 자료구조를 이용해 데이터를 정렬된 형태로 저장하며, 검색 성능 향상에는 큰 도움을 주지만 삽입, 수정, 삭제 시에는 추가적인 부하가 발생할 수 있다.
📌 인덱스의 종류
인덱스는 주로 단일 인덱스와 복합 인덱스로 나뉜다.
🎯 단일 인덱스 (Single Column Index)
- 하나의 컬럼에만 설정된 인덱스
- 특정 컬럼으로 자주 조회할 때 유용
CREATE INDEX idx_username ON users(username);
예시 쿼리 및 인덱스 활용
-- 사용자 이름으로 조회하는 경우
SELECT * FROM users WHERE username = 'john_doe';
위와 같이 특정 컬럼으로 자주 조회하면 단일 인덱스를 설정하는 것이 좋다.
🎯 복합 인덱스 (Composite Index)
- 여러 컬럼을 묶어서 설정하는 인덱스
- 여러 컬럼으로 조건 검색 시 유리
CREATE INDEX idx_user_fullname ON users(lastname, firstname);
예시 쿼리 및 인덱스 활용
-- 성과 이름을 모두 조건으로 검색하는 경우
SELECT * FROM users WHERE lastname = 'Kim' AND firstname = 'Jisoo';
복합 인덱스 설정 시 컬럼 순서는 WHERE 절의 조건에서 가장 자주 사용되는 컬럼부터 지정해야 효과적이다.
📌 단일 인덱스와 복합 인덱스의 차이
구분 | 단일 인덱스 | 복합 인덱스 |
---|---|---|
정의 | 하나의 컬럼에만 생성 | 두 개 이상의 컬럼에 동시에 생성 |
사용 상황 | 특정 컬럼으로만 자주 조회 | 여러 컬럼 조건을 동시에 자주 조회 |
성능 | 단일 컬럼 조회에 최적화 | 다중 컬럼 조회 조건에 최적화 |
주의사항 | 과도한 사용 시 역효과 가능 | 컬럼의 순서가 매우 중요 |
📌 인덱스 설계 시 고려사항
- 자주 검색되는 컬럼에만 인덱스를 생성
- **중복이 적고 카디널리티(Cardinality)가 높은 컬럼에 인덱스 생성**
- 데이터의 삽입, 수정, 삭제가 빈번할 경우 인덱스 수 최소화
- 복합 인덱스의 컬럼 순서를 신중히 결정 (검색 우선순위가 높은 컬럼부터)
📌 쿼리 성능 분석 및 인덱스 활용
- 자주 실행되는 쿼리 분석 후, WHERE 조건에 맞는 인덱스 설계
EXPLAIN
명령을 사용해 쿼리가 인덱스를 효율적으로 사용하는지 확인 가능
EXPLAIN SELECT * FROM users WHERE lastname = 'Kim';
이 결과를 통해 Full Table Scan 여부 및 인덱스 활용 여부를 쉽게 파악할 수 있다.
📌 장점과 단점
✅ 장점
- 데이터 조회 속도 대폭 향상
- 정렬 및 범위 검색 성능 개선
❌ 단점
- 데이터 변경 시 성능 저하 발생
- 과도한 인덱스는 저장 공간 증가 및 유지보수 비용 상승
댓글남기기