요약
인덱스의 가장 중요 요소는 처리범위를 최소화 시키는것으로 결합 칼럼 인덱스의 효율이 높다.
결합 칼럼 인덱스 생성을 위해서는 점 조건과 선분조건 순서에 의해 처리범위가 변한다는 것을 고려하여 생성 필요하다.
Index 사용이유
대용량의 데이터에서 원하는 적은 데이터 추출을 위해
SQL 성능 결정요인
- 처리 범위의 양
- 랜덤 액세스의 양
- 정렬의 양
처리범위란?
- 액세스 해야하는 데이터가 적음을 의미
- 액세스 해야하는 데이터가 적다면 인덱스를 이용하여 성능 보장 가능
예제로 이해하기
SELECT 카드번호, 사용액
FROM 거래내역
WHERE 거래일자 = '200803'
AND 사용구분 = '정상'
위의 SQL로 생성 가능한 Index는
- 거래일자 Index
- 사용구분 Index
- 거래일자 + 사용구분 Index
- 사용구분 + 거래일자 Index
- 거래일자
- 거래일자 Index이용시 처리 범위는 거래일자로만 감소
- 거래일자 칼럼이 200803인 데이터 모두 액세스
- 엑세스한 데이터 중 사용구분이 정상인 데이터만 결과로 추출
거래일자에 의해서만 처리범위가 감소하고 사용구분으로는 처리범위 감소하지 않음
- 사용구분
- 사용구분으로 Index이용시 처리범위는 사용구분으로만 감소
- 사용구분이 정상인 데이터만 액세스
- 액세스한 데이터 중 거래일자 값이 200803인 데이터만 결과로 추출
사용구분에 의해서만 처리범위 감소하고 거래일자로는 처리일자 감소하지 않음
- 거래일자+사용구분
- 거래일자가 200803인 데이터만 액세스
- 거래일자가 200803으로 감소된 처리범위에서 사용구분의 값이 정상인 데이터만 액세스
단일 칼럼 인덱스에 비해 처리범위 많이 감소
- 사용구분+거래일자
- 사용구분 값이 정상인 데이터만 액세스
- 감소된 처리범위에서 거래일자가 200803인 데이터만 액세스
단일 칼럼 인덱스에 비해 처리 범위가 많이 감소하여 SQL 성능에 대한 기대 가능
Where 절에 사용되는 연산자
- where절 조건에 존재하는 칼럼에 순서에 상관없이 결합 칼럼 인덱스를 생성한다고 처리범위가 감소하는 것은 아님
- where절에 사용하는 연산자에 따라 우선순위 정해야함
- where 절에 사용하는 조건은 아래 2가지로 구분
- 점조건 : IN, = 연산자를 이용한 조건을 의미 ex) 사용구분
- 선분조건 : Like, Between , <, >, 등과 같이 점 조건을 제외한 연산사 사용 조건, 선분 조건은 하나의 점이 아닌 해당 조건을 만족하는 모든 실수를 의미
조건에 사용되는 연산자에 의해 액세스 해야하는 처리범위의 차이 발생
- 점조건 + 점조건 : 두 조건에 의해 처리범위 감소
- 점 조건 + 선분 조건 : 두 조건에 의해 처리 범위 감소
- 선분 조건 + 선분 조건 : 앞의 선분 조건에 의해 처리 범위 감소
- 선분 조건 + 점 조건 : 앞의 선분 조건에 의해 처리 범위 감소
<EX>
SELECT 카드번호, 사용액
FROM 거래내역
WHERE 거래일자 > '200803'
AND 사용구분 = '정상'
- 거래일자 = 선분조건 / 사용구분 = 점조건
- 해당 SQL의 최적의 인덱스는 사용구분+거래일자 인덱스
- 점 조건+ 선분 조건으로 두 개의 조건에 의해 처리범위 감소
출처 : http://www.gurubee.net/lecture/2228
SQL의 성능은 처리 범위에 좌우된다
데이터베이스가 대용량으로 변화면서 우리는 항상 성능을 고민하게 된다. 이는 많은 데이터 중 우리가 원하는 데이터를 추출하는 것이 말처럼 쉽지만..
www.gurubee.net
'Tuning > INDEX' 카테고리의 다른 글
| 정렬제거를 위한 인덱스 선정 방법 (2) | 2023.09.21 |
|---|---|
| 추출 랜덤 액세스와 정렬 랜덤 액세스 (0) | 2023.09.21 |
| 랜덤액세스 이해 (0) | 2023.09.21 |
| 결합인덱스 선정하는 우선 순위 (0) | 2023.09.21 |