<목차>
1. 인덱스란?
< 인덱스 개념 >
< 인덱스 장단점 >
< 인덱스를 사용하기 위한 컬럼 선정 기준 >
2. 인덱스 종류
< 클러스터 인덱스 >
< 비클러스터 인덱스 >
3. 인덱스 생성 및 사용하기
< 인덱스 생성방법 >
< 조회 시 인덱스를 이용하기 위한 주의사항 >
1. 인덱스란?
< 인덱스의 개념 >
추가적인 쓰기 작업과 저장 공간을 활용하여 테이블 조회 속도를 향상시키기 위한 자료구조이다.
위와 같이 책 맨 앞이나 맨 뒤에 있는 색인처럼 모든 데이터를 조회하지 않게끔 데이터와 데이터의 위치를 포함한 자료구조를 만들어서 조회 속도를 향상시킨다.
< 인덱스 장단점 >
- 장점
- 테이블 조회 속도 향상 (WHERE, ORDER BY, JOIN)
- 빠른 조회 응답 속도를 통한 전반적 시스템 부하 감소
- 단점
- 인덱스 관리를 위해 DB의 약 10%에 해당하는 저장 공간 필요
- 인덱스 관리를 위한 추가 작업 필요 (DML 시 인덱스 갱신 필요)
- 인덱스 잘못 사용 시 오히려 성능 저하 ( 인덱스 비대 → 성능저하 )
⇒ 인덱스는 메모리를 차지 → 사용하지 않는 인덱스들은 주기적으로 삭제해야함.
< 인덱스를 사용하기 위한 컬럼 선정 기준 >
- 카디널리티 (Cardinality)
카디널리티 : 유니크한 정도
⇒ 카디널리티 높음 → 인덱스 설정하기 좋은 컬럼
- 선택도 (Selectivity)
선택도 : WHERE 절 이용 → 반환되는 레코드 수
⇒ 선택도 낮음 → 인덱스 설정하기 좋은 컬럼
- 활용도
활용도 : WHERE 절에서 이용되는 정도 (자주 이용 되는 지)
⇒ 활용도 높음 → 인덱스 설정하기 좋은 컬럼
- 중복도
중복도 : 해당 컬럼으로 생성한 인덱스의 수
⇒ 중복도 낮음 → 인덱스 설정하기 좋은 컬럼
2. 인덱스 종류
< 클러스터 인덱스 >
- PK 속성을 설정 → 자동으로 생성
- 테이블 당 1개만 허용
- 물리적 정렬 → 테이블 자체를 정렬
- 데이터 추가, 수정, 삭제 시 항상 정렬 상태 유지.
[ 아래 그림, T1을 Primary Key로 설정한 모습 → 정렬 O ]
< 비클러스터 인덱스 >
- UK, FK에 의해서 DB by DB로 자동 생성, CREATE INDEX로 직접 등록
- 테이블 당 여러 개의 인덱스 등록 가능
- 리프 페이지 이용 → 클러스터형 보다 조회 느림
- 레코드 원본 정렬 X → 클러스터형 보다 추가, 수정, 삭제 빠름.
[ 아래 그림, T1으로 비클러스터형 인덱스를 생성한 모습 → 정렬 X ]
3. 인덱스 생성 및 사용하기
< 인덱스 생성방법 >
CREATE INDEX <index_name>
ON <table_name> (column1, column2, ...)
# 단일 컬럼
CREATE INDEX customers_by_phone
ON customers (phone_number)
# 다중 컬럼
CREATE INDEX customers_by_phone
ON customers (phone_number, age, address)
다중 컬럼을 이용한 인덱스 생성 → 카디널리티가 높은 컬럼 순으로 인덱스 생성
⇒ 쿼리 성능이 높아짐.
< 조회 시 인덱스를 사용하기 위한 주의 사항 >
between
,>
,<
,like
등의 범위 조건 → 지양하기(phone_number, age, address)
→WHERE phone_number = X AND age > 10 AND address = Y
- age 보다 순서가 뒤인 address → 인덱스를 사용하지 않음.
- 반대로
=
,in
은 다음 컬럼도 인덱스를 사용한다.
OR
연산자 → 비교해야할 ROW 갯수 증가 → Full Scan이 발생할 확률이 높음.
- 컬럼 값 가공 → 인덱스 사용 X
WHERE age * 10 > 100
⇒ 인덱스 사용 X
WHERE age > 100 / 10
⇒ 인덱스 사용 O
- IS NULL 조건 → 인덱스 사용 O
- 다중 컬럼 인덱스 → 첫번째 컬럼 무조건 포함
(phone_number, age, address)
WHERE age = 10 AND address = X
⇒ 인덱스 사용 X
WHERE age = 10 AND phone_number = X
⇒ 인덱스 사용 O
⇒ 추가적인 정보
Reference
Uploaded by N2T