본문 바로가기

카테고리 없음

데이터베이스 인덱스:정의와 활용

데이터베이스 인덱스란?

데이터베이스 인덱스는 책의 색인처럼 데이터를 빠르게 검색할 수 있도록 돕는 구조입니다. 인덱스를 사용하면 WHERE, JOIN, ORDER BY 절에서 데이터를 효율적으로 탐색할 수 있습니다. 하지만 인덱스 자체도 데이터로 저장되기 때문에 용량을 차지하며, 무조건적으로 모든 컬럼에 인덱스를 추가하는 것은 오히려 비효율적일 수 있습니다.

인덱스의 주요 특징

  1. 인덱스는 특정 컬럼을 기반으로 데이터를 정렬하여 검색 속도를 높입니다.
  2. 인덱스가 적용된 컬럼을 WHERE 절로 검색하지 않으면 인덱스가 사용되지 않습니다.
  3. SELECT 성능은 향상되지만, CREATE, UPDATE, DELETE 연산에서는 추가적인 성능 비용이 발생합니다.

인덱스의 구조

  1. B-Tree:
    • 기본적으로 데이터베이스 인덱스는 B-Tree 구조를 사용합니다.
    • B-Tree는 이진 탐색 트리와 연결 리스트의 장점을 결합하여 데이터 탐색을 빠르게 수행합니다.
  2. Balanced-Tree:
    • 트리의 높이가 균형을 이루며, 각 노드는 자식 노드를 2개 이상 가질 수 있습니다.
    • 이러한 구조는 인덱스 검색에서 일정한 시간 복잡도를 보장합니다.

클러스터링 인덱스와 논클러스터링 인덱스

  1. 클러스터링 인덱스:
    • 테이블당 하나만 존재할 수 있습니다.
    • 데이터를 인덱스 순서에 따라 정렬하므로 데이터 자체가 인덱스의 역할을 합니다.
    • 주로 PRIMARY KEY에 적용됩니다.
  2. 논클러스터링 인덱스:
    • 한 테이블에 여러 개를 생성할 수 있습니다.
    • 데이터를 정렬하지 않고, 인덱스와 실제 데이터를 별도로 저장합니다.
    • UNIQUE KEY에 주로 사용됩니다.

인덱스의 활용 기준

  1. 카디널리티: 중복 값이 적고, 고유 값이 많은 컬럼(카디널리티가 높은 컬럼)에 인덱스를 적용해야 효과적입니다.
  2. 사용 빈도: WHERE, JOIN, ORDER BY 절에서 자주 사용되는 컬럼에 인덱스를 설정해야 합니다.
  3. 데이터 변경 빈도: 데이터 변경이 잦은 컬럼에 너무 많은 인덱스를 설정하면, 성능 저하가 발생할 수 있습니다.

복합 인덱스란

복합 인덱스는 두 개 이상의 컬럼을 조합하여 하나의 인덱스를 생성하는 데이터베이스 인덱스입니다. 단일 인덱스(Single Column Index)가 하나의 컬럼만 인덱싱하는 것과 달리, 복합 인덱스는 특정 쿼리 조건에 맞는 데이터를 더 효율적으로 조회하기 위해 여러 컬럼을 결합한 인덱스입니다.

ex) 복합 인덱스 (A, B, C)

- 하나의 인덱스가 세 개의 컬럼을 조합하여 정렬된 상태로 저장됩니다.

- 인덱스는 왼쪽부터 순차적으로 사용되므로, 컬럼 순서가 매우 중요합니다.

1. A만 사용하는 경우

WHERE A = ?

2. A와 B를 함께 사용하는 경우

WHERE A = ? AND B = ?

3. A, B, C를 모두 사용하는 경우

WHERE A = ? AND B = ? AND C = ?

4. A와 B를 사용하면서 C는 정렬 조건으로 사용하는 경우

WHERE A = ? AND B = ? ORDER BY C