조건 자에서 함수를 사용하는 쿼리는 다음과 같습니다.
commentType = 'EL'
AND commentDateTime >= DATEADD(month,datediff(month,0,getdate()) - 13,0)
40K 행이있는 commentType에 필터링 된 인덱스가 있으며 쿼리를 실행할 때 인덱스 검색의 예상 행 수는 매우 정확하지만 (약 11K) 다음 단계 (정렬 연산자)의 경우 통계를 완전히 무시하고 필터링 된 인덱스의 총 행 수를 추정합니다.
왜 이런 일이 발생합니까? sargability 에 대한 기본 사항을 알고 있으며 dateadd를 실제 날짜 (2014-01-01) 및 voila로 대체하여 온전함을 위해 테스트했습니다 ... 정렬은 행 수를 올바르게 추측하기 시작했습니다 ...
왜 이런 일이 발생하며 어떻게 해결할 수 있습니까? 고정 날짜를 전달할 수 없습니다 ...
DATEADD(month, -13, DATEADD(day, 1-DATEPART(day, SYSDATETIME()))
차이가 있는지 확인해 볼 수 있습니까?
(commentType, commentDate)
가 있으면 더 잘 작동합니까? 필터링 된 인덱스가 계획의 여러 지점에서 추정치를 잘못보고하는 경우가 있습니다. 필터링 된 인덱스의 총 수를보고하면 예상치 못한 것으로 보이지만 실제로 계획이 잘못 표시되고있는 것입니다.
DATEADD(month,datediff(month,0,getdate()) - 13,0)
이해가되지 않습니다. 이것으로 무엇을하려고합니까? 개선 / 간단 화 될 수 있습니까?