2012년 10월 29일 월요일

실행계획 데이터베이스 튜닝 - 실행계획분석 13

103

결합 컬럼 인덱스를 구성하는 컬럼의 순서

1순위 - 점 조건으로 사용된 컬럼

2순위 - 랜덤 엑세스 감소

3순위 - 정렬 제거

4순위 - 단일 컬럼의 분포도

WHERE 조건에 사용할 수 있는 연산자는 점 조건과 선분 조건으로 나뉜다.

SQL에서 최적의 인덱스는 처리 범위를 최소로 감소시키는 인덱스.

분포도가 좋다는 의미는 각 데이터가 중복되지 않고 고르게 퍼져 있는 것.

컬럼의 분포도가 좋으려면 동일 연산자(=)와 같은 점 조건으로 조회해야 한다.

따라서 선분 조건보다 점 조건이 있는 컬럼이 앞에 있어야만 처리 범위를 감소시킬 수 있다.

점 조건+선분 조건으로 인덱스를 생성하면 엑세스한 데이터에 대해 버려지는 데이터는 없다.

선분 조건 + 점 조건으로 인덱스를 생성하면 인덱스에 엑세스한 후 버려지는 데이터가 생긴다.

점 조건 + 점 조건으로 인덱스를 생성한다면 두 조건에 의해 처리 범위는 동시에 감소한다.

처리 범위만을 본다면 점 조건들의 순서가 변경되어도 처리 범위는 변하지 않게 된다.

선분 조건 + 선분 조건 인덱스를 생성하면 앞에 있는 선분 조건에 의해서만 처리 범위가 감소한다.

-----------------

결론

점 조건 + 점 조건 : 두 개의 점 조건에 의해 처리 범위 감소

선분 조건 + 선분 조건 : 앞의 선분 조건에 의해 처리 범위 감소

점 조건 + 선분 조건 두 개의 조건에 의해 처리 범위 감소

선분 조건 + 점 조건 : 앞의 선분 조건에 의해 처리 범위 감소

WHERE 절에 많은 조건이 있다면 점 조건들을 앞에 위치시키고 선분 조건을 뒤에 위치시켜 인덱스를 생성해야 처리 범위를 최소화할 수 있다.

* 결합 컬럼 인덱스의 처리 범위 최소화 규칙

----

두 개의 선분 조건은 연산자에 의해 추출되는 데이터의 양을 비교하여 연산자에 의한 분포도가 더 좋은 걸럼이 앞에 있어야 처리 범위를 더 감소시킬 수 있다.

----

인덱스를 이용하여 랜덤 엑세스를 제거하기 위해서는 랜덤 엑세스가 왜 발생하는지, 어떤 종류의 랜덤 엑세스가 있는지 이해해야 한다.

랜덤 엑세스의 종류는 3가지

1. 확인 랜덤 엑세스 - WHERE 조건을 인덱스에서 확인할 수 없을 경우 테이블에 엑세스해서 확인하는 랜덤 엑세스

2. 추출 랜덤 엑세스 - SELECT 절의 컬럼 값을 추출하기 위해 테이블에 엑세스하는 랜덤 엑세스

3. 정렬 랜덤 엑세스 - 정렬을 수행하는 ORDER BY 및 GROUP BY를 수행하기 위해 테이블에 엑세스하는 랜덤 엑세스

확인, 추출, 정렬 랜덤 엑세스의 제거는 처리 범위의 감소 다음으로 SQL의 성능에 있어 매우 중요하다.

----

결합 인덱스를 생성할 경우 단일 컬럼의 분포도

컬럼의 분포도가 아무리 좋아도 연산자를 선분 조건으로 사용하야 한다면 분포도는 나빠진다.

분포도가 나쁜 컬럼이라도 점 조건을 사용하여 여러 컬럼을 결합한다면 분포도가 좋아질 수 있다.

점 조건들,  선분 조건들의 순서를 정하기 위한 우선 순위를 선정할 경우에 단일 컬럼의 분포도를 고려해야 한다.

선분 조건에서는 단일 컬럼 자체의 분포도가 아니라 단일 컬럼의 분포도와 연산자에 의해 추출되는 데이터의 양을 업무에 적용하여 비교.

점 조건에는 해당 컬럼의 분포도를 그대로 적용.

----

데이블에 엑세스하는 대부분의 SQL을 함께 고려하여 최적의 인덱스를 선정


댓글 없음:

댓글 쓰기