Saya menguji arsitektur yang berbeda untuk tabel besar dan satu saran yang saya lihat adalah menggunakan tampilan dipartisi, di mana tabel besar dipecah menjadi serangkaian lebih kecil, tabel "dipartisi".
Dalam menguji pendekatan ini, saya telah menemukan sesuatu yang tidak masuk akal bagi saya. Ketika saya memfilter pada "kolom partisi" pada tampilan fakta, pengoptimal hanya mencari di tabel yang relevan. Selain itu, jika saya memfilter pada kolom itu di tabel dimensi, pengoptimal menghilangkan tabel yang tidak perlu.
Namun, jika saya memfilter pada beberapa aspek lain dari dimensi pengoptimal mencari PK / CI dari setiap tabel dasar.
Inilah pertanyaan yang dimaksud:
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];
Berikut tautan ke sesi SQL Sentry Plan Explorer.
Saya sedang mengerjakan benar-benar mempartisi tabel yang lebih besar untuk melihat apakah saya mendapatkan penghapusan partisi untuk merespons dengan cara yang sama.
Saya mendapatkan penghapusan partisi untuk kueri (sederhana) yang memfilter pada aspek dimensi.
Sementara itu, inilah salinan database yang hanya statistik:
https://gist.github.com/swasheck/9a22bf8a580995d3b2aa
Penaksir kardinalitas "lama" mendapatkan rencana yang lebih murah, tetapi itu karena perkiraan kardinalitas yang lebih rendah pada setiap indeks yang dicari (tidak perlu).
Saya ingin tahu apakah ada cara untuk mendapatkan pengoptimal menggunakan kolom kunci saat memfilter dengan aspek lain dari dimensi sehingga dapat menghilangkan mencari di tabel yang tidak relevan.
Versi 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
tabel. Saya tidak mendapatkan rencana yang sama dengan Paul, bahkan dengan 4199, dan saya pikir inilah sebabnya.
ObservationDates
. Saya akhirnya berjalan UPDATE STATISTICS ObservationDates WITH ROWCOUNT = 10000
secara manual untuk mendapatkan rencana yang ditunjukkan Paul.
ObservationDates
jadi saya tidak yakin apa yang terjadi dengan itu. juga, saya tidak bisa mendapatkan rencana paul dihasilkan juga. Saya akan mencoba pembaruan untuk melihat.
CREATE STATISTICS [_WA_Sys_00000008_2FCF1A8A] ON [dbo].[Observation_2010]([StationStateCode]) WITH STATS_STREAM = 0x01000000010000000000000000000000D4531EDB00000000D5080000000000009508000000000000AF030000AF000000020000000000000008D000340000000007000000E65DE0007DA5000076F9780000000000867704000000000000000000ABAAAA3C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000