'인덱스 생성'에 해당되는 글 1건

  1. 2008.06.11 결합 컬럼 인덱스

결합 컬럼 인덱스

개발/DB 2008. 6. 11. 22:00

결합 인덱스 구성 원칙

0순위 - WHERE조건에 사용하는 컬럼
1순위 - 컬럼이 사용한 연산자에 의한 인덱스 컬럼 선정
2순위 - 랜덤 액세스를 고려한 인덱스 컬럼 선정
3순위 - 정렬 제거를 위한 인덱스 컬럼 선정
4순위 - 단일 컬럼의 분포도를 고려한 인덱스 컬럼 선정

결합 인덱스 구성예

1. 카드번호의 분포도는 매우 좋고 거래일자 컬럼의 분포도는 매우 안 좋다.

1) 카드번호가 점조건인 경우
분포도 : 카드번호의 값이 WHERE 조건을 만족하는 데이터가 매우 적다.

SELECT 카드번호, 사용액 FROM 거래내역 WHERE 카드번호='111'
AND 거래일자 BETWEEN '20080501' AND '20080510';

이 경우는 카드번호 + 거래일자로 인덱스를 생성하면 카드번호 컬럼에 의해 처리범위 감소하고
거래일자에 의해서도 처리범위가 감소하므로 최소의 액세스가 보장된다.

2) 카드번호가 선분조건인 경우
SELECT 카드번호, 사용액 FROM 거래내역 WHERE 카드번호 BETWEEN '111' AND '555'
AND 거래일자='20080515';

이 경우는 카드번호+거래일자 인덱스를 생성하면 카드번호 컬럼에 의해서만 처리 범위가
감소하므로 성능 저하가 발생한다.

이유) '111'카드번호부터 '555'카드번호까지 2008년 5월 15일 데이터만 엑세스하는것이
아니라 '111'카드번호부터 '555'카드번호까지 모든 데이터를 액세스하기 때문이다.

따라서 아래와 같이 해야 한다.

1. 점 조건 + 점 조건 - 두 조건에 의해 처리 범위 감소
2. 점 조건 + 선분 조건 - 두 조건에 의해 처리 범위 감소
3. 선분 조건 + 선분 조건 - 앞의 선분 조건에 의해 처리 범위 감소
4. 선분 조건 + 점 조건 - 앞의 선분 조건에 의해서만 처리 범위 감소

*. 점조건(=, IN) 선분조건 (=, IN을 제외한 연산자)

출처 : 마이크로 소프트웨어 6월호

'개발 > DB' 카테고리의 다른 글

아카이브 로그 모드 설정  (0) 2009.11.26
백업및 복구를 위한 기본개념  (0) 2009.11.25
아카이브 로그 모드와 노 아카이브 로그 모드  (0) 2009.11.24
mysql 페이징  (0) 2009.03.02
mysql  (0) 2009.01.21
Posted by 무혹
,