큰 테이블에 대해 서로 다른 아키텍처를 테스트하고 있는데 한 가지 제안은 분할 된 뷰를 사용하여 큰 테이블을 일련의 작은 "파티셔닝 된"테이블로 나누는 것입니다.
이 접근법을 테스트하면서, 나는 나에게 전혀 이해가되지 않는 것을 발견했습니다. 팩트 뷰에서 "파티션 열"을 필터링하면 옵티마이 저는 관련 테이블에서만 검색합니다. 또한 차원 테이블에서 해당 열을 필터링하면 옵티마이 저가 불필요한 테이블을 제거합니다.
그러나 차원의 다른 측면을 필터링하면 옵티마이 저가 각 기본 테이블의 PK / CI를 찾습니다.
문제의 쿼리는 다음과 같습니다.
select
od.[Year],
AvgValue = avg(ObservationValue)
from dbo.v_Observation o
join dbo.ObservationDates od
on o.ObservationDateKey = od.DateKey
where o.ObservationDateKey >= 20000101
and o.ObservationDateKey <= 20051231
group by od.[Year];
select
od.[Year],
AvgValue = avg(ObservationValue)
from dbo.v_Observation o
join dbo.ObservationDates od
on o.ObservationDateKey = od.DateKey
where od.DateKey >= 20000101
and od.DateKey <= 20051231
group by od.[Year];
select
od.[Year],
AvgValue = avg(ObservationValue)
from dbo.v_Observation o
join dbo.ObservationDates od
on o.ObservationDateKey = od.DateKey
where od.[Year] >= 2000 and od.[Year] < 2006
group by od.[Year];
다음 은 SQL Sentry Plan Explorer 세션에 대한 링크 입니다.
실제로 더 큰 테이블을 분할하여 비슷한 방식으로 파티션 제거가 응답하는지 확인하려고합니다.
차원의 측면을 필터링하는 (간단한) 쿼리에 대한 파티션 제거를 얻습니다.
그 동안 다음은 통계 전용 데이터베이스 사본입니다.
https://gist.github.com/swasheck/9a22bf8a580995d3b2aa
"이전"카디널리티 추정기는 비용이 덜 드는 계획을 얻지 만 이는 (필요하지 않은) 각 인덱스 탐색에 대한 카디널리티 추정치가 낮기 때문입니다.
차원의 다른 측면으로 필터링 할 때 키 열을 사용하여 옵티마이 저가 관련없는 테이블에 대한 탐색을 제거 할 수있는 방법이 있는지 알고 싶습니다.
SQL Server 버전 :
Microsoft SQL Server 2014 - 12.0.2000.8 (X64)
Feb 20 2014 20:04:26
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
ObservationDates
테이블에 대한 통계가 없습니다 . 나는 4199의 경우에도 바울과 같은 계획을 얻지 못하고 있으며 이것이 바로 그 이유라고 생각합니다.
ObservationDates
. UPDATE STATISTICS ObservationDates WITH ROWCOUNT = 10000
Paul이 보여준 계획을 얻기 위해 수동으로 실행했습니다 .
ObservationDates
그래서 무슨 일이 일어나고 있는지 잘 모르겠습니다. 또한, 나는 계획 폴을 생성 할 수 없습니다. 나는 업데이트를 시도 할 것이다.
CREATE STATISTICS [_WA_Sys_00000008_2FCF1A8A] ON [dbo].[Observation_2010]([StationStateCode]) WITH STATS_STREAM = 0x01000000010000000000000000000000D4531EDB00000000D5080000000000009508000000000000AF030000AF000000020000000000000008D000340000000007000000E65DE0007DA5000076F9780000000000867704000000000000000000ABAAAA3C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000