Projektowanie widoków indeksów

Widoki są również nazywane tabelach wirtualnych, ponieważ zestaw wyników zwrócone przez widok ma tego samego formularza ogólne jako tabela z wierszy i kolumn i widoków można odwoływać się podobnie jak tabele w instrukcjach SQL.Widok standardowy zestaw wyników nie jest trwale przechowywana w bazie danych.Każdy czas kwerendy odwołuje się do widoku standardowym, SQL Server podstawia definicji widoku do kwerendy wewnętrznie, dopóki uformowane kwerendy zmodyfikowanego że oprzeć tylko odwołania do tabel.Następnie działa wynikowa kwerenda w zwykły sposób.Aby uzyskać więcej informacji, zobacz Rozdzielczość widoku.

Widok standardowy narzutów dynamicznie budowania zestaw wyników dla każdej kwerendy, która odwołuje się do widoku mogą być istotne dla widoków, obejmujących złożone przetwarzania dużej liczby wierszy, takie jak partii agregację danych, lub łączenie wielu wierszy.Jeśli w kwerendach są często odwołuje się do tych widoków, można zwiększyć wydajność przez tworzenie unikatowego indeks klastrowany w widoku.Podczas tworzenia unikatowego indeks klastrowany w widoku zestaw wyników jest przechowywany w bazie danych tak samo jak znajduje się tabela z indeks klastrowany.

Inną zaletą tworzenia indeksu w widoku jest, że Optymalizator uruchamiania przy użyciu indeksu widoku w kwerendach, które bezpośrednio nie nazwę widoku w klauzula FROM.Istniejące kwerendy można korzystać z poprawy efektywności pobierania danych z indeksowany widok bez konieczności recoded się.Aby uzyskać więcej informacji, zobacz Rozwiązywanie indeksów dla widoków.

Modyfikacje są wprowadzane dane w tabelach podstawowych, modyfikacji danych są odzwierciedlane w danych przechowywanych w indeksowany widok.Wymóg, że unikatowy indeks klastrowany widoku poprawia wydajność z którym SQL Server można znaleźć w wierszach indeksu, który dotyczy wszelkich modyfikacji danych.

optymalizator kwerendy możliwość zalet Widoki indeksowane podczas przetwarzania kwerend poprawiła się nad starszymi wersjami, gdy kwerenda i definicji widoku zawiera następujące elementy pasujące:

  • Skalarną wyrażenia.Na przykład optymalizator kwerendy można dopasować następującą kwerendę z wartość skalarna wyrażenie w predykacie jej:

    SELECT ColA, ColB FROM TableT WHERE ColC * (ColD + 10) > 50
    

    Do indeksu utworzonego w tym widoku:

    CREATE VIEW V1 WITH SCHEMABINDING AS
    SELECT ColA, ColB, ColC * (ColD + 10) AS ExpCol
    FROM dbo.TableT 
    

    Skalarną wyrażeń, które zawierają funkcje zdefiniowane przez użytkownika można również być dopasowane w podobny sposób.

  • Funkcje skalarne wartość zagregowana.Na przykład, poniższa kwerenda zawiera wartość skalarna funkcja agregująca w jego liście:

    SELECT COUNT_BIG (*) FROM dbo.TableT
    

    Można uzgodnić z Indeks utworzony w tym widoku:

    CREATE VIEW V2 WITH SCHEMABINDING AS
    SELECT COUNT_BIG (*) AS Cnt 
    FROM dbo.TableT 
    

optymalizator kwerendy rozważą ponadto następujące po jej wybraniu planu kwerend:

  • Czy przedział wartości zdefiniowanych w predykacie kwerendy mieści się w odstępach zdefiniowanych w indeksowany widok.Rozważmy na przykład indeks utworzony na następujący widok:

    CREATE VIEW V1 WITH SCHEMABINDING AS
    SELECT ColA, ColB, ColC FROM dbo.TableT
    WHERE ColA > 1 and ColA < 10
    

    Należy rozważyć następującą kwerendę:

    SELECT ColB, ColC FROM dbo.TableT
    WHERE ColA > 3 and ColA < 7
    

    optymalizator kwerendy spełniają tę kwerendę w widoku V1 ponieważ interwał między 3 i 7 określonych w upadkom kwerendy w przedziale między 1 i 10 określonych w indeksowany widok.

  • How much an expression defined in a query is equivalent to that defined in an indexed view.SQL Server tries to match expressions by considering their column references, literals, the logical operators AND, OR, NOT, BETWEEN and IN, and the comparison operators =, <>, >, <, >=, and <=.Operatory arytmetyczne, takie jak + i % i parametry nie są uważane za.

    Na przykład optymalizator kwerendy są zgodne z następującą kwerendę:

    SELECT ColA, ColB from dbo.TableT
    WHERE ColA < ColB 
    

    Z indeksem utworzone w tym widoku:

    CREATE VIEW V1 WITH SCHEMABINDING AS
    SELECT ColA, ColB FROM dbo.TableT
    WHERE ColB > ColA 
    

Należy pamiętać, że jak przypadek wszystkich indeksów SQL Server wybierze indeksowany widok w swoim planie kwerendy tylko wtedy, gdy optymalizator kwerendy określa, czy pomaga to zrobić.

Widoki indeksowane można tworzyć w dowolnej wersji programu SQL Server 2008.W SQL Server 2008 przedsiębiorstwa, optymalizator kwerendy automatycznie uzna indeksowany widok.Aby użyć indeksowany widok wszystkie inne wersje, można użyć wskazówka tabela NOEXPAND.

Wskazówki dotyczące projektowania widoku indeksowanego.

Widoki indeksowane działają najlepiej, gdy dane rzadko jest aktualizowany.Konserwacja indeksowany widok może być większa niż koszt utrzymania indeks tabela.Jeśli w danych źródłowych jest często aktualizowana, koszt utrzymania danych indeksowany widok mogą być większe niż zalet wydajności przy użyciu indeksowany widok.Dane okresowo aktualizowane w porcjach, ale traktowane przede wszystkim jako tylko do odczytu między aktualizacjami, rozważyć upuszczanie wszystkie widoki indeksowane przed aktualizowaniem i odbudowy je później.W ten sposób może zwiększyć wydajność aktualizacji.

Widoki indeksowane poprawa wydajności następujące typy kwerend:

  • Sprzężenia i agregacji, które przetwarzają wiele wierszy.

  • Sprzężenia i agregacja operacje, które są często wykonywane przez wiele kwerendy.

    Na przykład w bazie (OLTP) online przetwarzanie transakcji, która jest nagrywany zapasów, wielu kwerend oczekuje się łączyć ProductMaster, ProductVendor, i VendorMaster tabele.Chociaż każda kwerenda wykonująca tego łączyć nie może przetworzyć wiele wierszy, ogólną przetwarzania łączyć setki tysięcy takiej kwerendy mogą być znaczące.Ponieważ te relacje nie są często aktualizowane, definiując indeksowany widok przechowuje wyniki sprzężonych można lepiej ogólną wydajność całego systemu.

  • Decyzja obsługi obciążenia pracą.

    Przechowując dane podsumowane, zagregowane rzadko aktualizowane są charakteryzowane systemy analizy.Ponadto agregowania danych i łączenie wielu wierszy charakteryzuje wiele wspomaganie decyzji obsługi kwerend.Ponadto wspomaganie decyzji systemy zawierają czasami szerokości tabel z wieloma kolumny lub kolumn, które są duże, lub obu.Kwerendy odwołujące się do podzbiór wąskie kolumny te mogą korzystać z indeksowany widok, zawierający tylko kolumny w kwerendzie lub wąskie nadzbiór tych kolumn.Tworzenia widoków indeksowanych wąskie, które zawierają podzbiór kolumn jednej tabela jest znany jako partycjonowanie pionowe strategii ponieważ dzieli tabele w pionie.Na przykład rozważmy następującą tabela i indeksowany widok:

    CREATE TABLE wide_tbl(a int PRIMARY KEY, b int, ..., z int)
    CREATE VIEW v_abc WITH SCHEMABINDING AS
    SELECT a, b, c
    FROM dbo.wide_tbl
    WHERE a BETWEEN 0 AND 1000
    CREATE UNIQUE CLUSTERED INDEX i_abc ON v_abc(a)
    

    Następujące kwerendy można odpowiedzieć tylko za pomocą v_abc:

    SELECT b, count_big(*), SUM(c)
    FROM wide_tbl 
    WHERE a BETWEEN 0 AND 1000
    GROUP BY b
    

    Widok v_abc zajmuje wiele stron mniej niż tabela wide_tbl.Dlatego mogą być lepiej Optymalizator wybrać go jako ścieżka dostępu do rozwiązywania poprzedniej kwerendy.

    Jeśli chcesz podzielić pełny spis pionowo, zamiast podzbiór zaleca się użyć indeks nieklastrowany na tabela użyto klauzula Dołącz, aby dołączyć kolumny, które mają, zamiast indeksowany widok.Aby uzyskać więcej informacji, zobacz CREATE INDEX (Transact-SQL).

Widoki indeksowane zazwyczaj nie poprawia wydajność następujące typy kwerend:

  • Systemy OLTP, które mają wiele zapisów.

  • Bazy danych, które mają wiele aktualizacji.

  • Kwerendy, które nie obejmują agregacji lub sprzężenia.

  • Agregacji danych o wysokim stopniu kardynalność klucz Grupuj według.Wysoki stopień Kardynalność oznacza klucz zawiera wiele różnych wartości.Unikatowy klucz ma najwyższy stopień Kardynalność, ponieważ każdy klucz zawiera inną wartość.Widoki indeksowane zwiększyć wydajność przez zmniejszenie liczby wierszy kwerendy ma dostęp.Jeśli zestaw wyników widoku prawie tyle wierszy w tabela bazowa, przynosi niewielkie wydajności z widoku.Na przykład rozważmy następującą kwerendę w tabela zawierającej 1000 wierszy:

    SELECT PriKey, SUM(SalesCol)
    FROM ExampleTable
    GROUP BY PriKey
    

    Jeśli kardynalność klucz tabela jest 100, zbudowany przy użyciu wyników tej kwerendy indeksowany widok tylko miałoby 100 wierszy.Kwerendy używające widoku wymagałoby średnio jednej dziesiątej odczyty wymagane przeciwko tabela bazowa.Jeśli klucz jest unikatowy klucz, kardynalność klucza jest 1000 i 1000 wierszy zwraca zestaw wyników widoku.Jeśli widok i ExampleTable tabela bazowa mają wierszy o rozmiarze równym, kwerenda ma wydajność nie uzyskać za pomocą tego indeksowany widok zamiast odczytywać bezpośrednio tabeli podstawowej.

  • Rozwijanie sprzężenia.Są to widoki zawierające zestawy wyników, które są większe niż oryginalne dane w tabelach podstawowych.

Łączenie indeksowane widoki z kwerendami

Chociaż ograniczenia na typy widoków, które mogą być indeksowane może uniemożliwić projektowania widoku, który rozwiązuje problem kompletne, mogą być projektowania wielu widoków indeksowanych mniejszych częściach tej prędkości.

Rozważmy następujące przykłady:

  • Często wykonywane kwerendy agreguje dane w jednej bazie danych, agreguje dane w innej bazie danych, a następnie łączy wyniki.Ponieważ indeksowany widok nie odwołują się do tabel z więcej niż jednej bazy danych, nie można projektować jednego widoku do wykonywania całego procesu.Jednak utworzyć indeksowany widok w każdej bazie danych, który agregacja danej bazy danych.Jeśli można dopasować Optymalizator indeksowanych widoki przeciwko istniejących kwerend przynajmniej agregacja przetwarzania będą przyśpieszony bez wymogu recode istniejące kwerendy.Chociaż nie jest szybsze przetwarzanie łączyć, ogólny kwerendy jest szybsze, ponieważ używa wartooci agregacji, przechowywane w Widoki indeksowane.

  • Często wykonywane kwerendy agreguje dane z kilku tabel, a następnie używa Unii połączyć wyniki.Unia jest niedozwolony w indeksowany widok.Ponownie można projektować widoki, aby wykonać poszczególne operacje poszczególnych agregacja.Optymalizator zaznacz widoki indeksowane, aby przyspieszyć kwerend bez obowiązku recode kwerend.Podczas przetwarzania Unii nie poprawiła się, są agregacja poszczególnych procesów.

Projektowanie widoków indeksowanych, spełniające wiele operacji.Ponieważ Optymalizator można użyć indeksowany widok, nawet jeśli nie jest określony w klauzula FROM, dobrze indeksowany widok, można przyspieszyć przetwarzanie wielu kwerend.

Rozważmy na przykład tworzenia indeksu w następującym widoku:

CREATE VIEW ExampleView WITH SCHEMABINDING
AS
SELECT GroupKey, SUM(Colx) AS SumColx, COUNT_BIG(Colx) AS CountColx
FROM MyTable
GROUP BY GroupKey

Nie tylko w tym widoku spełnia kwerendy bezpośrednio odwołać kolumny widoku, może również służyć do zaspokojenia kwerend, które kwerendy tabela bazowa i zawierać wyrażeń takich jak SUM(Colx), COUNT_BIG(Colx), COUNT(Colx), i AVG(Colx).Takie kwerendy będzie szybciej, ponieważ mają one tylko do pobrania niewielkiej liczby wierszy w widoku zamiast odczytywać pełnej liczby wierszy z tabel podstawowych.

Podobnie indeksowany widok który agreguje dane i grup w ciągu dnia mogą być używane do zaspokojenia kwerendy agregujące przez kilka różnych zakresów więcej niż jeden dzień, takich jak 7, 30 lub 90 dni.