Partitioned View

SQL Server 2008 wprowadza widoki partycjonowane. Służą one do optymalizacji zapytań na bardzo dużej ilości danych. Rozważmy scenariusz w którym mamy 12 tabel, przechowujących archiwalne informację o sprzedaży np. JanuarySales, FebruarySales, MarchSales itd. Dane przechowywane w tych tabelach różnią się tylko czasem (dana tabela przechowuje wyłącznie informacje z określonego miesiąca). Aby móc skorzystać z widoku partycjonowanego należy użyć ograniczenia CHECK na kolumnie, będącej kryterium podziału:

CREATE TABLE JanuarySales
(
    OrderID      INT,
    Month      INT
    CHECK (Month = 1),
    CONSTRAINT OrderIDMonth PRIMARY KEY(OrderID, Month)
)

Budowanie partycjonowanego widoku niczym nie różni się od klasycznego widoku:

CREATE VIEW Sales
AS
SELECT * FROM JanuarySales
UNION ALL
SELECT * FROM FebruarySales
UNION ALL
SELECT * FROM MarchSales
...--i tak dla reszty miesiecy

Widok Sales jest teraz partycjonowany. Co to oznacza? Załóżmy, że teraz wykonujemy poniższe zapytanie:

SELECT * from Sales WHERE Month in (1,2) and Price>1

SQL Server zoptymalizuje zapytanie i będziemy przeszukiwać tak naprawdę wyłącznie tabele JanuarySales i FebruarySales.  Zamiast przeszukiwać 12 tabel, będziemy szukać danych tylko w 2 tabelach.

Leave a Reply

Your email address will not be published.