개발자 끄적끄적

Index의 종류와 특징 본문

MySQL

Index의 종류와 특징

햏치 2023. 3. 12. 15:32

<Index 종류와 특징>
1. Index Unique Scan
- 인덱스를 사용한 검색 방식 중 가장 빠른 방식
- 이 방식을 사용하기 위해서는 키본 키 또는 Unique Index가 생성되어 있어야 하며
  인덱스를 구성하고 있는 모든 컬럼이 조건절에서 '='로 비교되어야 한다
- 조인되는 Inner Table 과의 조인 조건에도 Unique index 또는 기본 키 컬럼이 모두 조인에 참여했을 때만
  Index Unique Scan을 할 수 있다

2. Index Range Scan 
- 인덱스를 사용해 인덱스가 생성된 컬럼에 대해 범위를 검색하는 방법
- Unique Index를 사용하지 않거나, 비교연산자를 사용한 대다수의 경우가 이 방식으로 처리되며
  비교 연산자로는 <, <=, >, >=, between, like 등이 사용된다

3. Index Skip Scan
- 결합 인덱스의 선행 컬럼에 대한 조건이 없고 후행 컬럼에 대한 조건이 있는 경우에만 적용된다
- 이 방식은 선행 컬럼 값의 중복을 제거한 값의 종류가 적은 경우 유리하다

4. Index Full Scan 
- 조건절 인덱스 컬럼 중 하나 이상을 사용한 경우 또는 SQL에서 사용한 컬럼들이 모두 하나의 엔덱스에 
  존재할 경우 적용되는 방식이다
  이 가운데 SQL에서 사용한 컬럼들이 모두 하나의 인덱스에 존재할 경우 인덱스를 구성하는 컬럼 중 최소한 하나의 컬럼은 Not Null 제약 조건을 충족해야 한다
- 이 방식을 병렬로 처리하는 것은 불가능하다(단일 블록 I/O 블록 단위 검색)

4. Index Fast Full Scan 
- Select 절과 조건절에 사용된 모든 컬럼이 인덱스 컬럼으로 구성되어 있어 테이블을 검색하지 않고
  인덱스의 블록만을 스캔하여 원하는 데이터를 검색하는 방식이다
- Index Full Scan과 달리 병렬처리가 가능하나 인덱스 키 데이터의 정렬은 보장하지 않는다
- 비트맵 인덱스에 대해서는 이 방식을 적용할 수 없다


<효과적인 인덱스 컬럼 선정>
1. 조건절에 자주 등장하는 컬럼
  - 조건절에 항상 사용되는 컬럼
  - 항상 '='로 비교되는 컬럼
  - 분포도가 좋은 컬럼을 선두에 위치
  - Order by절에서 자주 사용하는 정렬 순서로 컬럼 순서 지정

2. 조인 조건으로 사용되는 컬럼


ex) 아래와 같은 구조를 가진 테이블에서 Unique Index Scan을 할 수 없는 것
KEY1(PK)    Number
KEY1(PK)    Number
COL1        Varchar2
COL2        Varchar2
COL3        Varchar2
1. 모두 사용할 수 없다
2. WHERE KEY1 AND KEY2 =2
3. WHERE (KEY1, KEY2) IN ( (1,2) )
4. WHERE KEY1 = 1
-> 4 KEY1 = 1이라는 뜻은 키의 값이 1이라는 뜻이 아니라 True라는 뜻이다

'MySQL' 카테고리의 다른 글

MERGE INTO  (0) 2023.03.12
MySQL cmd 관련 명령어  (0) 2023.03.08
인덱스  (0) 2023.03.08