매우 큰 테이블을 가지고 있으며 월별 범위를 사용하여 날짜별로 파티션을 나누었습니다.런타임에 파티션 정리 기능이 작동하는지 확인하려면 어떻게해야합니까?
하드 값을 지정하는 쿼리가 실행 계획에서 적절한 파티션 정리를 수행한다는 것을 알게되었습니다. (WHERE DATE_KEY = '1/1/2011'
). 해당 달의 파티션 만 검사합니다.
그러나 변수 (WHERE DATE_KEY = @DATE_KEY)
을 사용하면 저장 프로 시저에서 SQL Server가 모든 파티션을 검색합니다.
그래서 SQL Server는 런타임과 달리 실행 계획을 캐싱 할 때 파티션 정리를 수행합니다. 이상적이지 않습니다.
해결 방법은 동적 SQL 대신 EXEC('...WHERE DATE_KEY=''' + @DATE_KEY+ '''')
을 사용하는 것입니다. 어떤 작품이지만 아주 우아하지 않습니다.
동적 SQL을 거치지 않고이 작업을 제대로 수행하는 데 사용할 수있는 스위치 또는 일부 매개 변수가 있는지 궁금합니다. 일부 가상의 "SET COMPILE_PLAN_AT_RUNTIME ON"
또는 뭐라고 말하면 ....
수 2는 고정 우리 특히 우리는 작은 날짜 시간을 사용하여 분할 된 테이블을 가지고 있었고 매개 변수를 작은 날짜 시간에 명시 적으로 캐스팅하지 않으면 SQL을 사용하거나 C# 코드에서 param 유형을 SqlDbType.SmallDateTime으로 적용하면 파티션 제거가 발생하지 않습니다. SQL Server 작동 방식에 대한 자세한 내용 : http://sqlblog.com/blogs/paul_white/archive/2012/09/12/why-doesn-t-partition-elimination-work.aspx –