결합 인덱스 구성 칼럼 순서
1. 컬럼이 사용한 연산자에 의한 인덱스 컬럼
2. 선정랜덤 액세스를 고려한 인덱스 컬럼 선정
3. 정렬 제거를 위한 인덱스 컬럼 선정
4. 단일 컬럼의 분포도를 고려한 인덱스 컬럼 선정
조건에 따른 인덱스 구성
- 점 조건 + 점 조건 : 두 조건에 의해 처리 범위 감소
- 점 조건 + 선분 조건 : 두 조건에 의해 처리 범위 감소
- 선분 조건 + 선분 조건 : 앞의 선분 조건에 의해 처리 범위 감소
- 선분 조건 + 점 조건 : 앞의 선분 조건에 의해서만 처리 범위 감소
점/선 조건을 결정하는 것은 연산자로 결합 인덱스시 가장 먼저 고려대상이 되는것이 연산자
단일 칼럼 엑세스만으로 해결 할 수 없는 데이터 베이스의 성능을 결합 칼럼 인덱스로 해결가능
결합 인덱스 구성하는 칼럼의 순서
- 인덱스를 이용하여 성능 향상의 효과를 보려면 해당 인덱스로 처리범위를 최대한 감소 시켜야함
- 성능 향상을 위한 결합 인덱스 구성 칼럼은 다음의 순서에 맞도록 생성 해야함
- 컬럼이 사용한 연산자에 의한 인덱스 컬럼 선정
- 랜덤 액세스를 고려한 인덱스 컬럼 선정
- 정렬 제거를 위한 인덱스 컬럼 선정
- 단일 컬럼의 분포도를 고려한 인덱스 컬럼 선정
- where절 조건에 사용하는 칼럼으로 인덱스 만드는 것은 너무 당연한것!
- 이런 우선 순위로 구성한다면 원하는 데이터를 추출할 때 최소의 디스크 I/O 발생시켜 성능 보장 받음
결합 인덱스를 구성하는 칼럼의 연산에 주목
<EX1>
SELECT 카드번호, 사용약
FROM 거래내역
WHERE 카드번호 = '111'
AND 거래일자 BETWEEN '20080501'
AND '20080510';
- 위의 SQL에서 카드번호 칼럼의 분포도는 좋은편이고 거래일자 칼럼의 분포도는 안좋다고 가정
- 분포도가 좋다 = 해당 TABLE에서 값 중 카드번호의 값을 만족하는 값(데이터)가 적다는 의미
- 분포도가 좋은 카드번호를 결합인덱스의 앞에 두고 분포도가 나쁜 거래일자를 뒤로해서 인덱스 구성
- 카드번호(점 조건) + 거래일자(선분조건) 결합 인덱스
- 분포도가 좋으면 첫 칼럼의 조건에 만족하는 데이터가 상대적으로 적음, 적은 데이터를 가지고 다음 칼럼으로가 조건 확인 후 액세스
카드 번호 칼럼에 의해 처리범위 감소하고 거래일자 칼럼에 의해서도 처리범위 감소
= 데이터에 최소의 액세스로 결과 추출 가능
<EX2>
SELECT 카드번호, 사용액
FROM 거래내역
WHERE 카드번호 BETWEEN '111'
AND '555'
AND 거래일자 = '20080515';
- 이 SQL에서 분포도만 생각하여 카드번호+거래일자 인덱스 생성시
- 카드번호(선분조건) + 거래일자(점조건)
- 카드 번호 '111'부터 '555'에서 2008년 05월15일 데이터만 액세스 하는 것이 아니라 카드 번호 '111' 부터 '555'까지 모든 데이터 액세스
카드번호 칼럼에 의해서만 처리범위 감소
-> 분포도는 = 조회할 경우 생각하는 것!
-> 분포도가 아무리 좋아도 LIKE '1%'로 데이터를 찾으려고 할때 데이터의 값이 다 1로 시작한다면 분포도의 의미가 없음
출처 : http://www.gurubee.net/lecture/2229
결합 인덱스를 선정하는 우선순위
아직도 많은 사이트에서 단일 컬럼 인덱스만을 고집하는 경우가 많다. 과연 데이터를 액세스하기 위해 우리는 단일 컬럼 인덱스를이용해야 하는 것..
www.gurubee.net
'Tuning > INDEX' 카테고리의 다른 글
| 정렬제거를 위한 인덱스 선정 방법 (2) | 2023.09.21 |
|---|---|
| 추출 랜덤 액세스와 정렬 랜덤 액세스 (0) | 2023.09.21 |
| 랜덤액세스 이해 (0) | 2023.09.21 |
| SQL 성능을 결정하는 처리 범위 (0) | 2023.09.20 |