Tôi đang thử nghiệm các kiến trúc khác nhau cho các bảng lớn và một đề xuất mà tôi đã thấy là sử dụng chế độ xem được phân vùng, theo đó một bảng lớn được chia thành một loạt các bảng nhỏ hơn, "phân vùng".
Khi thử nghiệm phương pháp này, tôi đã phát hiện ra điều gì đó không có ý nghĩa gì đối với tôi. Khi tôi lọc trên "cột phân vùng" trên chế độ xem thực tế, trình tối ưu hóa chỉ tìm kiếm trên các bảng có liên quan. Ngoài ra, nếu tôi lọc trên cột đó trên bảng thứ nguyên, trình tối ưu hóa sẽ loại bỏ các bảng không cần thiết.
Tuy nhiên, nếu tôi lọc trên một số khía cạnh khác của kích thước, trình tối ưu hóa sẽ tìm kiếm trên PK / CI của mỗi bảng cơ sở.
Dưới đây là các truy vấn trong câu hỏi:
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];
Đây là một liên kết đến phiên SQL Sentry Plan Explorer.
Tôi đang làm việc trên thực tế phân vùng bảng lớn hơn để xem liệu tôi có loại bỏ phân vùng để đáp ứng theo cách tương tự.
Tôi nhận được loại bỏ phân vùng cho truy vấn (đơn giản) lọc trên một khía cạnh của thứ nguyên.
Trong thời gian này, đây là bản sao cơ sở dữ liệu chỉ thống kê:
https://gist.github.com/swasheck/9a22bf8a580995d3b2aa
Công cụ ước tính cardinality "cũ" có được một gói ít tốn kém hơn, nhưng đó là do ước tính cardinality thấp hơn trên mỗi chỉ số (không cần thiết) tìm kiếm.
Tôi muốn biết liệu có cách nào để tối ưu hóa sử dụng cột khóa khi lọc theo một khía cạnh khác của kích thước để nó có thể loại bỏ tìm kiếm trên các bảng không liên quan.
Phiên bản máy chủ SQL:
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
bảng. Tôi không nhận được kế hoạch giống như Paul, ngay cả với 4199, và tôi nghĩ đây là lý do.
ObservationDates
. Cuối cùng tôi đã chạy UPDATE STATISTICS ObservationDates WITH ROWCOUNT = 10000
bằng tay để có được kế hoạch mà Paul đã thể hiện.
ObservationDates
vì vậy tôi không chắc điều gì đang xảy ra với điều đó. Ngoài ra, tôi cũng không thể có được kế hoạch paul được tạo ra. Tôi sẽ thử cập nhật để xem.
CREATE STATISTICS [_WA_Sys_00000008_2FCF1A8A] ON [dbo].[Observation_2010]([StationStateCode]) WITH STATS_STREAM = 0x01000000010000000000000000000000D4531EDB00000000D5080000000000009508000000000000AF030000AF000000020000000000000008D000340000000007000000E65DE0007DA5000076F9780000000000867704000000000000000000ABAAAA3C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000