CS/데이터베이스

[데이터베이스] 인덱스(Index)

Heeyeon Choi 2024. 10. 31. 22:27
728x90
 데이터베이스 테이블에 대한 검색 동작 속도를 높여주는 자료구조

인덱스의 장점

  1. 빠른 검색 성능: 인덱스를 사용하면 데이터 검색 속도가 크게 향상되므로, 대규모 데이터베이스에서 성능이 중요한 조회 작업에서 유리합니다.
  2. 정렬 및 집계 성능 향상: 인덱스가 설정된 열에 대해 정렬, 집계 등의 작업이 빨라집니다.
  3. 고유성 보장: 유니크 인덱스를 통해 특정 열이 고유한 값을 가지도록 보장할 수 있습니다.

인덱스의 단점

  1. 추가 저장 공간 필요: 인덱스는 별도의 데이터 구조를 사용하여 저장되기 때문에 추가적인 저장 공간이 필요합니다.
  2. 데이터 수정 시 성능 저하: 데이터를 삽입, 수정, 삭제할 때 인덱스도 업데이트되어야 하므로, 잦은 수정 작업이 필요한 열에 인덱스를 적용하면 성능이 저하될 수 있습니다.
  3. 과도한 인덱스 사용 시 성능 저하: 모든 열에 인덱스를 생성하면 데이터 검색은 빨라질 수 있지만, 데이터 추가 및 수정 시 오히려 성능이 저하될 수 있습니다.
 

인덱스(Index)데이터베이스에서 데이터를 빠르게 검색할 수 있도록 도와주는 데이터 구조입니다. 인덱스는 테이블의 특정 열이나 열 조합에 대해 생성되며, 데이터의 위치 정보를 포함하여 검색 속도를 향상시키는 역할을 합니다. 인덱스를 사용하면 전체 테이블을 조회하지 않고도 특정 데이터를 신속하게 찾을 수 있어, 성능이 중요한 대규모 데이터베이스에서 특히 유용합니다.

인덱스의 작동 원리

인덱스는 책의 색인처럼 작동하여, 데이터베이스에서 특정 데이터를 검색할 때 직접 데이터를 탐색하지 않고 인덱스를 통해 데이터의 위치를 먼저 확인합니다. B-트리(B-tree), 해시(Hash) 등 다양한 자료구조를 이용하여 구현됩니다.

  1. 검색 속도 향상: 인덱스를 사용하면 특정 열을 기준으로 데이터를 빠르게 검색할 수 있습니다.
  2. 데이터 위치 참조: 인덱스는 데이터의 위치 정보를 담고 있어, 필요한 데이터를 직접 찾아가며 전체 테이블을 탐색할 필요가 없습니다.

인덱스의 장점

  1. 빠른 검색 성능: 인덱스를 사용하면 데이터 검색 속도가 크게 향상되므로, 대규모 데이터베이스에서 성능이 중요한 조회 작업에서 유리합니다.
  2. 정렬 및 집계 성능 향상: 인덱스가 설정된 열에 대해 정렬, 집계 등의 작업이 빨라집니다.
  3. 고유성 보장: 유니크 인덱스를 통해 특정 열이 고유한 값을 가지도록 보장할 수 있습니다.

인덱스의 단점

  1. 추가 저장 공간 필요: 인덱스는 별도의 데이터 구조를 사용하여 저장되기 때문에 추가적인 저장 공간이 필요합니다.
  2. 데이터 수정 시 성능 저하: 데이터를 삽입, 수정, 삭제할 때 인덱스도 업데이트되어야 하므로, 잦은 수정 작업이 필요한 열에 인덱스를 적용하면 성능이 저하될 수 있습니다.
  3. 과도한 인덱스 사용 시 성능 저하: 모든 열에 인덱스를 생성하면 데이터 검색은 빨라질 수 있지만, 데이터 추가 및 수정 시 오히려 성능이 저하될 수 있습니다.

인덱스의 유형

  1. 기본 인덱스(Primary Index):
    • 기본 키(Primary Key)에 자동으로 생성되는 인덱스입니다.
    • 각 행을 고유하게 식별할 수 있으며, 중복을 허용하지 않습니다.
  2. 고유 인덱스(Unique Index):
    • 중복을 허용하지 않는 열에 사용되며, 유일한 값을 보장합니다.
    • 예를 들어, 이메일 주소와 같이 유일해야 하는 열에 설정됩니다.
  3. 일반 인덱스(Non-Unique Index):
    • 중복이 허용되는 열에 사용할 수 있으며, 검색 속도를 높이는 역할을 합니다.
  4. 복합 인덱스(Composite Index):
    • 두 개 이상의 열을 결합하여 만든 인덱스입니다.
    • 복합 조건의 검색 속도를 높일 수 있으며, 지정된 열의 순서에 따라 인덱스가 적용됩니다.
  5. 클러스터형 인덱스(Clustered Index):
    • 테이블의 실제 데이터가 인덱스에 따라 정렬되어 저장됩니다. 기본 키가 클러스터형 인덱스로 설정되는 경우가 많습니다.
    • 테이블당 하나의 클러스터형 인덱스만 생성할 수 있습니다.
  6. 비클러스터형 인덱스(Non-Clustered Index):
    • 인덱스와 실제 데이터가 별도로 저장되며, 인덱스는 데이터의 위치만 참조합니다.
    • 하나의 테이블에 여러 개의 비클러스터형 인덱스를 생성할 수 있습니다.

인덱스 사용 예시

-- 직원 테이블에서 이름 열에 인덱스 생성
CREATE INDEX idx_이름 ON 직원(이름);

-- 직원 테이블에서 복합 인덱스 생성
CREATE INDEX idx_이름_부서 ON 직원(이름, 부서ID);

-- 기본 키에 자동으로 생성된 인덱스
CREATE TABLE 직원 (
    직원ID INT PRIMARY KEY,
    이름 VARCHAR(50),
    부서ID INT
);

인덱스 사용 시 고려사항

  • 조회가 빈번한 열에 인덱스 설정: 조회나 검색이 자주 이루어지는 열에 인덱스를 설정하는 것이 효과적입니다.
  • 자주 수정되는 열에는 인덱스 자제: 인덱스가 설정된 열에 자주 데이터가 추가, 수정, 삭제될 경우, 인덱스가 업데이트되어 성능 저하가 발생할 수 있습니다.
  • 적절한 인덱스 개수 유지: 인덱스는 많을수록 저장 공간과 성능에 부담이 되므로 필요한 열에만 생성하는 것이 좋습니다.

결론

인덱스는 데이터베이스의 검색 성능을 최적화하는 중요한 도구로, 데이터의 양이 많아질수록 그 필요성이 커집니다. 다만, 인덱스는 추가 저장 공간과 성능에 영향을 미칠 수 있으므로 상황에 따라 신중히 설계하고 사용해야 합니다.

728x90