본문 바로가기

컴퓨터/데이터베이스

[데이터 베이스] INDEX

INDEX

테이블의 데이터 검색 속도를 향상시키기 위해 사용되는 데이터베이스 객체이다.

인덱스는 테이블의 한 열이나 여러 열에 대해 생성할 수 있고, 데이터의 물리적인 저장 순서와는 독립적으로 데이터의 빠른 조회를 도와주는 역할을 한다.

따라서 대규모 데이터를 다루는 환경에서 데이터베이스의 성능 최적화에 중요한 역할을 한다.

그리고 인덱스는 데이터를 정렬된 상태로 유지하여 범위 검색과 정렬된 데이터의 조회가 빠르게 이루어질 수 있도록 한다.

 

CREATE INDEX idx_last_name
ON employees (last_name);

DROP INDEX idx_last_name; -- 인덱스 삭제

CREATE UNIQUE INDEX idx_last_name -- UNIQUE한 인덱스 생성
ON employees (last_name);

 

인덱스의 경우 위처럼 CREATE로 생성하고 DROP으로 삭제할 수 있다.

그리고 UNIQUE 인덱스는 테이블의 특정 컬럼에 중복된 값이 없도록 보장한다.

이는 데이터의 무결성을 유지하는 데 사용될 수 있다.

 

인덱스가 생성된 컬럼의 데이터 유형, 길이, 테이블의 데이터 양에 따라 데이터베이스의 추가적인 공간을 사용한다. 

따라서 모든 컬럼에 인덱스를 생성하는 것은 바람직하지 않고 인덱스가 필요한 컬럼을 선택해서 시스템의 성능을 살펴보고 인덱스를 사용해야 한다.

그리고 테이블에 데이터가 삽입, 삭제, 업데이트될 때마다 인덱스도 함께 업데이트되어야 하기 때문에 이로 인해 데이터 변경 작업의 성능이 저하될 수 있다.

따라서 대량의 데이터 변경이 일어나는 배치 작업의 경우 인덱스를 일시적으로 제거했다가 작업 완료 후 다시 생성하는 방법을 사용 하는것이 좋다.

인덱스 알고리즘

  1. B-트리 (B-Tree)
    B-트리 인덱스는 가장 널리 사용되는 인덱스 알고리즘으로 균형 잡힌 트리 구조를 가진다.
    이 구조는 데이터의 삽입, 삭제, 검색 작업을 효율적으로 처리할 수 있게 해준다.
    각 노드는 키 값의 범위를 가지고 있어 이를 통해 검색 시간을 대폭 줄일 수 있다.

  2. B+트리 (B+Tree)
    B+트리는 B-트리의 변형으로 모든 데이터 값은 리프 노드에만 저장되고, 내부 노드는 검색 키를 가이드하는 데 사용된다.
    이 구조는 데이터베이스에서 범위 검색을 최적화하기 위해 자주 사용된다.

  3. 해시 인덱스 (Hash Index)
    해시 인덱스는 해시 테이블을 사용하여 데이터를 저장하여 주로 특정 값과 정확히 일치하는 데이터 검색인 등가 검색에 최적화되어 있다.
    해시 인덱스는 키 값을 해시 함수를 통해 해시 코드로 변환하고, 이 해시 코드를 사용해 데이터의 위치를 빠르게 찾는다.
    하지만 이러한 방법은 범위 검색에는 적합하지 않다.

  4. R-트리 (R-Tree)
    R-트리는 공간 데이터를 인덱싱하기 위해 설계된 계층적 구조로 주로 지리적 정보 시스템(GIS), 공간 데이터베이스에서 사용된다.
    R-트리는 공간 객체의 경계를 둘러싸는 최소한의 경계 상자(MBR)를 사용하여 공간 데이터를 인덱싱한다.

  5. GiST (Generalized Search Tree)
    GiST는 일반화된 검색 트리로 기하학적 데이터 및 검색 연산을 지원하기 위해 설계된 확장 가능한 인덱스 구조이다.
    B-트리, R-트리 등 다양한 인덱스 구조를 일반화한 형태로 특정 애플리케이션에 맞게 인덱스의 성질을 사용자 정의할 수 있다.

  6. GIN (Generalized Inverted Index)
    GIN 인덱스는 전역 역 인덱스로 배열이나 JSON과 같이 복합 값을 가진 컬럼을 인덱싱하는 데 사용된다.
    텍스트 검색이나 배열 내 요소 검색과 같은 경우에 효율적이다.