A에 대한 COUNT(DISTINCT)
갖는다 ~ 10 억 개 고유 값, 난 단지 ~ 300 만 행이있을 것으로 추정 해시 집계와 쿼리 계획을 얻고있다.
왜 이런 일이 발생합니까? SQL Server 2012는 적절한 견적을 제공하므로 SQL Server 2014의 버그로 Connect에 대해보고해야합니까?
쿼리와 잘못된 추정
-- Actual rows: 1,011,719,166
-- SQL 2012 estimated rows: 1,079,130,000 (106% of actual)
-- SQL 2014 estimated rows: 2,980,240 (0.29% of actual)
SELECT COUNT(DISTINCT factCol5)
FROM BigFactTable
OPTION (RECOMPILE, QUERYTRACEON 9481) -- Include this line to use SQL 2012 CE
-- Stats for the factCol5 column show that there are ~1 billion distinct values
-- This is a good estimate, and it appears to be what the SQL 2012 CE uses
DBCC SHOW_STATISTICS (BigFactTable, _WA_Sys_00000005_24927208)
--All density Average Length Columns
--9.266754E-10 8 factCol5
SELECT 1 / 9.266754E-10
-- 1079126520.46229
쿼리 계획
전체 스크립트
다음은 통계 전용 데이터베이스를 사용하여 상황을 완전히 재현 한 것입니다 .
내가 지금까지 시도한 것
관련 항목에 대한 통계를 조사한 결과 밀도 벡터에 약 11 억 개의 고유 값이 표시됩니다. SQL Server 2012는이 추정치를 사용하여 적절한 계획을 수립합니다. 놀랍게도 SQL Server 2014는 통계에서 제공하는 매우 정확한 추정치를 무시하고 대신 훨씬 낮은 추정치를 사용합니다. 이렇게하면 메모리가 거의 예약되지 않고 tempdb에 유출되는 훨씬 느린 계획이 생성됩니다.
추적 플래그를 시도했지만 4199
상황이 해결되지 않았습니다. 마지막으로, 이 기사의(3604, 8606, 8607, 8608, 8612)
후반부에서 설명한 것처럼 추적 플래그 조합을 통해 옵티 마이저 정보를 파고 들었습니다 . 그러나 최종 출력 트리에 나타날 때까지 잘못된 추정치를 설명하는 정보를 볼 수 없었습니다.
연결 문제