인덱스(Index)란?

take_the_king·2025년 3월 11일

데이터베이스

목록 보기
2/2

1. 인덱스(Index)란?

인덱스란 데이터베이스에서 검색 성능을 향상시키기 위해 사용하는 자료구조이다.
마치 책의 목차처럼 특정 데이터를 빠르게 찾을 수 있도록 도와준다. 인덱스가 없을 경우, 데이터베이스는 원하는 데이터를 찾기 위해 전체 테이블을 조회(Full Table Scan)해야 하지만, 인덱스를 사용하면 원하는 데이터를 효율적으로 검색할 수 있다.

한마디로, 정렬해놓은 컬럼 사본을 의미한다.

2. 인덱스의 동작 원리

인덱스는 일반적으로 B-Tree 또는 Hash 구조를 이용하여 데이터를 정렬하거나 해싱하여 관리한다. 예를 들어, B-Tree 인덱스는 정렬된 데이터를 유지하면서 검색, 삽입, 삭제 작업을 효율적으로 수행할 수 있도록 한다. 이를 통해 특정 값을 빠르게 찾고, 범위 검색도 효과적으로 수행할 수 있다.

3. 인덱스의 종류

3.1 기본(Basic) 인덱스

클러스터형 인덱스(Clustered Index)

테이블의 데이터가 인덱스에 의해 정렬된 형태로 저장된다.

한 테이블당 하나의 클러스터형 인덱스만 생성 가능하다.

검색 속도가 빠르지만, 데이터 삽입/삭제 시 재정렬이 필요할 수 있다.

비클러스터형 인덱스(Non-Clustered Index)

데이터 자체는 정렬되지 않고, 별도의 인덱스 페이지가 존재하여 검색 시 실제 데이터 페이지로 매핑된다.

한 테이블에 여러 개의 비클러스터형 인덱스를 생성할 수 있다.

3.2 특수 인덱스

유니크 인덱스(Unique Index)

중복 값을 허용하지 않는 인덱스이다.

PRIMARY KEY 또는 UNIQUE 제약 조건을 적용할 때 사용된다.

복합 인덱스(Composite Index)

여러 개의 컬럼을 조합하여 생성하는 인덱스이다.

특정 컬럼 조합에 대한 검색 성능을 높일 수 있다.

해시 인덱스(Hash Index)

키-값 기반의 해시 테이블을 사용하여 데이터를 검색한다.

동등(=) 검색에는 빠르지만 범위 검색에는 적합하지 않다.

부분 인덱스(Partial Index)

테이블의 특정 부분만을 대상으로 생성하는 인덱스이다.

필요하지 않은 데이터까지 인덱싱하는 비용을 줄일 수 있다.

4. 인덱스의 장점과 단점

4.1 장점

검색 속도 향상: 특정 컬럼에 대한 검색이 빠르게 수행됨.

정렬 속도 개선: ORDER BY 절을 사용할 때 성능 향상.

조인 성능 향상: 조인 시 필요한 키 값을 빠르게 찾을 수 있음.

4.2 단점

INSERT/UPDATE/DELETE 성능 저하: 인덱스가 많을수록 데이터 변경 시 추가적인 인덱스 관리 비용 발생.

디스크 공간 사용 증가: 인덱스는 별도의 저장 공간을 차지하므로 테이블 크기가 증가함.

과도한 인덱스 생성 시 오버헤드 발생: 너무 많은 인덱스는 오히려 성능을 저하시킬 수 있음.

5. 인덱스 사용 예제 (MySQL 기준)

5.1 기본 인덱스 생성

CREATE INDEX idx_user_name ON users(name);

5.2 클러스터형 인덱스 (PRIMARY KEY)

CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);

5.3 비클러스터형 인덱스 생성

CREATE INDEX idx_email ON users(email);

5.4 복합 인덱스 생성

CREATE INDEX idx_name_email ON users(name, email);

5.5 인덱스 삭제

DROP INDEX idx_user_name ON users;

6. 인덱스 활용 및 최적화 전략

자주 조회되는 컬럼에 대해 인덱스를 설정.

중복되지 않는 유니크한 값이 많은 컬럼을 선택하여 인덱스를 생성.

불필요한 인덱스는 제거하여 데이터 삽입/수정 성능을 개선.

쿼리 실행 계획(EXPLAIN)을 사용하여 인덱스가 제대로 활용되는지 확인.

7. 결론

인덱스는 데이터베이스 성능 최적화의 핵심 요소이며, 적절한 사용이 중요하다. 무분별한 인덱스 생성은 오히려 성능 저하를 초래할 수 있으므로, 데이터 특성과 조회 패턴을 고려하여 신중하게 인덱스를 설계해야 한다.

profile
개발을 좋아하는 taketheking 입니다.

0개의 댓글