1. 통계(Statistics)란?
테이블이나 인덱스의 데이터 분포를 나타내는 메타데이터로, 쿼리 최적화 도구(Query Optimizer)가 효율적인 실행 계획을 생성하는 데 사용된다. 효율적인 쿼리 실행을 위해 필수적인 요소이다.
2. 통계의 필요성
통계는 조회 대상 데이터의 예상되는 행 수를 산정하는 기반이 된다.
그래서 통계 정보가 없을 때의 실행계획에서는 1,258,290건을 예상하고 Hash Join으로 수행했다.
그와 다르게 통계 정보가 있을 떄의 실행계획은 예상 행 수가 6,090건으로 낮게 계산되면서 Merge Join의 실행 계획으로 수행한다.
이처럼 통계 정보의 유무에 따라 예상 행 수가 달라지고, 실행 계획에 차이가 발생하게 된다.
3. 통계 구성요소
통계는 헤더, 밀도 벡터, 히스토그램을 포함한다.
다음은 통계 정보를 확인하기 위한 기본 명령이다.
DBCC SHOW_STATISTICS ({테이블 | 인덱싱 뷰}, {인덱스명 | 통계명}) {WITH 옵션}
나는 WITH 옵션 없이 테이블명과 인덱스명만 특정하여 조회해봤다.
DBCC SHOW_STATISTICS (테이블명, 인덱스명)
실행 결과는 상단부터 통계 헤더, 밀도 벡터, 히스토그램을 나타낸다.
1) 헤더(Header)
통계 헤더는 대상 통계의 기본 메타정보를 담고 있는 부분이다.
DBCC SHOW_STATISTICS (테이블명, 인덱스명) WITH STAT_HEADER
WITH STAT_HEADER를 덧붙이면 헤더만 조회가 가능하다.
- Name : 통계의 이름
- Updated : 해당 통계의 마지막 업데이트 시간
- Rows : 통계 마지막 업데이트 시간 기준 전체 행 수
- Rows Sampled : 통계 정보가 업데이트 될 때 참고했던 행의 수
- Steps : 히스토그램의 단계 수
- Density : 히스토그램 경계 값을 제외한 모든 값에 대한 1/고유 값
- Average key length : 전체 열의 데이터들이 가지는 평균 바이트 수(길이)
- String Index : 문자열 요약 통계가 별도로 저장되어 있음을 표기
- Filter Expression : 필터링된 인덱스를 사용할 경우에 필터 조건자를 나타냄
- Unfiltered Rows : 필터 조건에 의해 필터 되지 않은 행의 수
2) 밀도 백터(Density Vector)
밀도 벡터는 단일 열 혹은 인덱스에 포함된 모든 열의 선택도를 나타낸다. (데이터 값의 중복 정도)
DBCC SHOW_STATISTICS (테이블명, 인덱스명) WITH DENSITY_VECTOR
- All density : 1/고유 값
- Average Length : 열 접두사의 열 값 목록을 저장하기 위한 평균 길이(바이트)
- Columns : 모든 밀도 및 평균 길이가 표시되는 접두사의 열 이름
선택도(밀도)가 1에 가까울수록 데이터가 많이 중복될 수 있음을 나타낸다.
3) 히스토그램(Histogram)
통계 개체의 첫 번째 키 열에 있는 데이터 분포를 요약한 그래프이다.
DBCC SHOW_STATISTICS (테이블명, 인덱스명) WITH HISTOGRAM
- RANGE_HI_KEY : 히스토그램 단계로 지정된 값의 상한 값
- RANGE_ROWS : 현재 단계와 이전 단계 사이에서 상한 값을 제외한 값들의 행 수
- EQ_ROWS : 각 단계에서 상한 값과 같은 값을 가진 행의 수
- DISTINCT_RANGE_ROWS : 현재 단계와 이전 단계 사이에서 상한 값을 제외한 값들의 중복을 제거한 데이터 수
- AVG_RANGE_ROWS : RANGE_ROWS/DISTINCT_RANGE_ROWS 값. 히스토그램 단계로 지정되지 못한 값의 카디널리티
'코딩 공부 기록 > SQL' 카테고리의 다른 글
[MSSQL] 격리 수준 (ISOLATION) (2) | 2024.12.09 |
---|---|
[MSSQL] SQL Server 잠금(LOCK)의 종류 (1) | 2024.12.06 |
[SQL] 인덱스 조각화 (0) | 2024.11.25 |
[MSSQL] 인덱스의 스캔 방식 (2) | 2024.11.22 |
[MSSQL] 클러스터 인덱스(Clustered Index)와 비 클러스터 인덱스(Non Clustered Index) (0) | 2024.11.22 |