DB & SQL

[DB2] 인덱스 종류와 Scan 종류

akasha.park 2024. 9. 24. 12:56

[ 인덱스  종류]

1.  B-트리 인덱스 (B-tree Index)
모든 값이 정렬되어 저장되므로 순차적 검색이 빠릅니다.
키 값을 기준으로 효율적인 범위 검색이 가능합니다.
균형 트리 구조로 인해 트리의 높이가 낮아 O(log n) 시간 복잡도를 가집니다.
기본적으로 **고유 인덱스(Unique Index)**와 **비고유 인덱스(Non-Unique Index)**로 사용할 수 있습니다.


2. 인덱스 범위 스캔 (Index Range Scan)
인덱스에 있는 각 키 값이 고유해야 하며,
기본 키(Primary Key)나 유니크 키(Unique Key)를 지원하기 위해 사용됩니다.

3. 비고유 인덱스 (Non-Unique Index)
컬럼 값에 중복이 허용되며, 중복된 값에 대해서도 빠르게 검색할 수 있도록 지원하는 인덱스


4. 클러스터형 인덱스 (Clustered Index)
클러스터형 인덱스는 인덱스 키 순서에 따라 실제 데이터가 물리적으로 정렬되도록 하는 인덱스
DB2에서는 테이블당 하나의 클러스터형 인덱스만 생성할 수 있습니다.
인덱스 순서대로 데이터가 물리적으로 저장되어, 범위 검색 성능이 크게 향상됩니다.
데이터 삽입 시 항상 인덱스 순서에 따라 데이터를 정렬해야 하므로, 삽입 작업이 상대적으로 느릴 수 있습니다.
일반적으로 대량의 데이터를 정렬할 때 사용됩니다.

5. 역방향 스캔 인덱스 (Reverse Scan Index)
인덱스에서 값을 역순으로 검색할 때 사용하는 인덱스
최신 데이터(내림차순 정렬된 데이터)를 검색하는 경우 유용


6. 복합 인덱스 (Composite Index)
여러 컬럼을 결합하여 생성하는 인덱스
여러 컬럼을 기반으로 다중 조건 검색 성능이 크게 향상됩니다.


7. 비트맵 인덱스 (Bitmap Index )
각각의 인덱스 값에 대해 비트맵을 생성하여 데이터를 검색하는 방식
규모 데이터베이스에서 저장 공간을 절약하고 다중 조건을 효율적으로 처리하는 데 유용합니다. 
특히, 값이 중복도가 높은 컬럼에 적합합니다.


8. 익스프레스 인덱스 (Expression-Based Index) , 함수 기반 인덱스 (Function-Based Index)
단순히 컬럼 값이 아니라 표현식을 기반으로 생성된 인덱스
특정 연산이 자주 사용되거나 데이터가 특정 방식으로 정규화되어 있지 않을 때  유용
날짜 계산이나 문자열 조작 등의 표현식에 대해 인덱스를 생성하고 싶을 때.
자주 사용되는 함수나 계산식이 있는 경우 성능 최적화에 도움을 줍니다.

 

 

 

 

 

[Index Scan 종류]

 

1. 인덱스 전 범위 스캔 (Index Full Scan)
인덱스의 모든 엔트리를 처음부터 끝까지 스캔하는 방식
인덱스에 있는 모든 데이터를 탐색할 때 사용되며, 인덱스가 테이블의 대부분의 데이터를 커버할 때 효율적입니다.
쿼리가 특정 조건 없이 정렬된 데이터를 필요로 할 때 사용

2. 인덱스 범위 스캔 (Index Range Scan)
인덱스의 일부 범위만 스캔하는 방식
조건절이 인덱스의 선두 컬럼에 적용될 때 조건에 맞는 인덱스 엔트리들만 탐색하여 효율적으로 데이터를 조회합니다.

3. 인덱스 유일 스캔 (Index Unique Scan)
인덱스에서 하나의 행만 검색할 때 사용되는 방식
고유 인덱스(Unique Index)나 프라이머리 키(Primary Key)에 의해 단일 값을 검색할 때 사용

4. 인덱스 리프 스캔 (Index Leaf Scan)
인덱스의 리프 블록만 스캔하는 방식
정렬된 데이터를 반환할 때 

5. 인덱스 스킵 스캔 (Index Skip Scan)
인덱스의 선두 컬럼이 쿼리 조건에 없더라도, 그 이후의 컬럼이 조건에 맞는 경우 DB2가 인덱스를 사용해 검색하는 방식

6. 인덱스 전 범위 스캔 + 테이블 액세스 (Index Full Scan with Table Access)
인덱스에 포함된 컬럼 외에 다른 컬럼 값이 필요할 때
인덱스의 전체 범위를 스캔한 후, 그 결과를 바탕으로 실제 테이블에서 필요한 데이터를 가져오는 방식

7. 비트맵 인덱스 스캔 (Bitmap Index Scan)
. 여러 인덱스 조건이 함께 주어질 때 각각의 인덱스를 별도로 검색한 후, 그 결과를 결합하여 최종 결과를 도출합니다. 특히, OR 조건이 포함된 쿼리에서 유용하게 사용됩니다.

8. 인덱스 전역 스캔 (Index Global Scan)
DB2의 파티셔닝된 인덱스를 사용하는 경우, 파티션에 관계없이 전체 인덱스를 스캔하는 방식
파티셔닝된 테이블에서 파티션 경계를 넘어서 데이터를 검색할 때

9. 인덱스 부분 키 스캔 (Index Partial Key Scan)
인덱스의 일부 키만을 사용하여 스캔하는 방식
쿼리 조건이 인덱스의 선두 컬럼 중 일부에만 해당할 때 사용됩니다. 
다중 컬럼 인덱스에서 일부 컬럼에만 조건이 있는 경우 해당 조건에 맞는 부분만 스캔합니다.