통계
- 검색 조건이 주어질 때 해당 컬럼으로 구성되는 인덱스를 사용할지 여부를 옵티마이저가 판단의 근거로 활용
- 통계는 데이터가 있는 컬럼에 대해 인덱스가 만들어질 때 이 컬럼 값의 히스토그램 및 관련정보를 이용하여 만들어진다.
Sysindex 테이블의 image형식의 statblog컬럼에 통계정보가 저장된다.
SELECT * FROM SYSINDEXES
데이터베이스 옵션의 auto create statistics와 auto update statistics는 모든 데이터베이스에 대해 자동으로ture로 설정되며 이 옵션들이 설정되어 있으면 인덱스뿐만 아니라 인덱스가 없는 컬럼에 대해서도 필요할 경우 자동으로 통계가 만들어지고 일정 비율(전체행의 약20%)의 데이터가 업데이트 되면통계도 자동으로 업데이트 된다.
밀도(density)는 1/(인덱스키들의 수)로 정의된다. 즉, 성별은 밀도가 0.5(남자, 여자)이지만 나의 주민등록 번호는 1/5000만 이 된다.(대한민국 인구수를 5천만으로 가정 했을 때).
이때 선택도(selectivity)는 주어진 키 값(또는 키 범위)에 해당하는 행수의 정도를 말하는데 행수가 적을수록 선택도가 높다. 그러나 전체 밀도가낮더라도 특정 키에 대한 선택도는 낮을 수도 있다.
[통계 보기]
DBCC SHOW_STATISTICS문을 사용하여 통계를 확인 할수 있다. 실습에서는 AdventureWorks의 [Person.Address]테이블을 사용 한다.
DBCC SHOW_STATISTICS([PERSON.ADDRESS], PK_ADDRESS_ADDRESSID)
Updated : 최근 통계가 업데이트된 날짜.
Rows : 전체 행 수
Rows Sampled : 샘플링된 행 수 (행 수가 많을 경우 일부를 샘플링하여 사용)
Steps : 히스토그램의 단계 수.고유 인덱스가 아닐 경우 단계수가 많아지며 최대 200단계 이다.
Average Key length : 컬럼 값의 평균 길이. Int형이므로 4가 표시 된다.
All density : 밀도. 밀도는 Steps의 값과 무관하며 일반적으로 (1/ 인덱스 키들의 수) 이다.
RANGE_HI_KEY : 각 단계(step)에서샘플링된 최대 값.
RANGE_ROWS : 각 단계에서RANGE_HI_KEY갑을 제외한 값들의 개수.
EQ_ROWS : 최대값의 개수.
DISTINCT_RANGE_ROWS : RANGE_ROWS 컬럼 값들중 고유한 값의 개수.
수동으로 통계 업데이트
UPDATE STATISTICS 테이블이름
인덱스 정보 확인하기
EXEC SP_HELPINDEX [PERSON.ADDRESS]
출처 : http://sqlmvp.kr/140165557766