SQL Server

SQL Server 통계 예상 행수 산출 방식의 변화

DBASeoul 2022. 12. 24. 22:40
다중 컬럼 컬럼 통계가있는 경우, 카디널리티 추정치는 다음과 같이 다른 모델에서 계산됩니다.

 

SQL Server 7 - 2012 (레거시 CE) : 레거시 카디널리티 평가 기는 다중 열 통계를 활용하고 열 조합에 대한 '모든 밀도'값을 가져와 테이블의 총 행 수로 곱합니다.
 
SQL Server 2014 : SQL Server 2014 RTM에 도입 된 새로운 CE는 다중 열 통계를 사용하지 않으며 개별 단일 열 통계와 함께 지수 기부를 사용합니다.

 

SQL Server 2016 : SQL Server 2016 에서 향상된 기능이 추가되었으며 CE 모델 버전 130은 열의 조합에 대해 '모든 밀도'값을 사용하고 테이블의 총 행 수로 곱하는 다중 열 통계를 다시 사용합니다 .

 

SQL Server 2014 CE에서 액세스 할 수없는 다중 열, 열 통계 및 해당 필터링 된 통계에도 불구하고 추적 플래그 및 쿼리 힌트를 사용하여 기존 CE를 강제로 활용할 수 있습니다.

 

다중 포지션 카디널리티 추정

 

기본적으로 쿼리 최적화 중에 SQL Server는 모든 조건 자 열에 대한 단일 열 통계를 자동으로 만듭니다 (아직 사용할 수없는 경우). 
SQL Server는 다중 열 통계를 자동으로 만들지 않고 수동으로 만들 수 있지만 첫 번째 명명 된 열에 대해서만 막대 그래프를 만듭니다.

 

다중 컬럼 컬럼 통계가없는 경우, 카디널리티 추정 모델은 다음과 같습니다.

 

레거시 CE : 카디널리티 평가 기는 SQL Server가 일반적으로 테이블의 여러 특성 값이 서로 완전히 독립적으로 분산되어 있다고 가정하는 독립성 가정 모델을 사용합니다.

 

AND S1, S2, S3 AND (S1 * S2 * S3)

 

Estimate = 테이블 카디널리티 * (S1 * S2 * S3) AND 독립성 가정을 사용하면 선택도 S1, S2 및 S3과 AND (연결이라고도 함) S3)

 

견적 = 선택 (SELECT COUNT (*) FROM [TableName]) * (S1 * S2 * S3)

 

(S1 + S2) - (S1 * S2)
Estimate = 테이블 카디널리티 (TotalRows) * ((S1 + S2)) OR 선택도 : 선택도 S1 및 S2와 OR (분리 ) - (S1 * S2)) *

 

= ((S1 + S2) - (S1 * S2)) 추측 = SELECT (SELECT COUNT (*) FROM [TableName]

 

새로운 CE : 새로운 카디널리티 평가 기는 분리형 (OR) 경우에 공식이 공식적으로 또는 다른 방식으로 문서화되지 않았지만 결합 적 (AND) 및 분리 (OR) 술어 모두에 지수 백 오프 공식을 사용합니다. 결합 적 술어에 대한 새로운 접근법은 카디널리티 C 및 술어 선택성 S1, S2, S3, S4가있는 테이블이 주어진 경우 지수가 백 오프를 사용하는 것입니다. S1은 가장 선택적이고 S4는 최소입니다.
 
Estimate = Table Cardinality * S1 * SQRT (S2 ) * SQRT (SQRT (S3)) * SQRT (SQRT (SQRT (S4)))

 

추정 = SELECT [TABLENAME] FROM (COUNT (* 해당)) * S1 * SQRT (S2) * SQRT (SQRT (S3)) * SQRT (SQRT (SQRT (S4)))

 

Estimate = Table Cardinality * S1 * SQRT (S2 ) * SQRT (SQRT (S3)) * SQRT (SQRT (SQRT (S4)))

 

예상 행수 = 첫번째 조건 선택도 * 테이블 레코드수 * 두번째 조건 선택도의 제곱근