Widoki indeksowane projektowania

Widoki są również nazywane tabelach wirtualnych, ponieważ zestaw wyników zwróconych przez widok jest tym samym formularzu ogólne jako tabela z kolumnami i wierszami i widoków można odwoływać się tak samo jak tabele w instrukcji SQL.Zestaw wyników widoku standardowego jest trwale nie jest przechowywana w bazie danych.Za każdym razem kwerendy odwołuje się widok standardowy SQL Server Podstawia definicji widoku do kwerendy wewnętrznie do momentu modyfikacji kwerendy jest utworzona czy tylko odwołania podstawy tabel. Go następnie uruchomiony zostanie utworzona kwerenda w zwykły sposób.Aby uzyskać więcej informacji zobaczWyświetl rozwiązanie.

W widoku standardowym obciążenie związane z dynamicznie tworzenia wyników dla każdej kwerendy, która odwołuje się do widoku może być istotne dla widoków, które wymagają złożonych przetwarzania dużej liczby wierszy, takie jak agregację dużej ilości danych, lub łączenie wielu wierszy.Jeśli kwerendy są często odwołuje się do tych widoków, można poprawić wydajność, tworząc unikatowego indeks klastrowany w widoku.Podczas tworzenia unikatowego indeks klastrowany w widoku wykresu, zestaw wyników jest przechowywane w bazie danych, tak samo, jak przechowywane są tabele z indeks klastrowany.

Inną zaletą tworzenia indeksu w widoku jest to, że optymalizator ma być uruchamiany przy użyciu indeksu widoku w kwerendach, które nie bezpośrednio nazwę widoku w klauzula FROM.Istniejące kwerendy można korzystać z lepszą wydajność pobierania danych z widok indeksowany bez konieczności być recoded.Aby uzyskać więcej informacji zobaczIndeksy rozpoznawania na widoki.

Dane w tabelach podstawowych były wprowadzane zmiany, zmiany danych są odzwierciedlane w danych przechowywanych w widok indeksowany.Wymaganie, że unikatowy indeks klastrowany widoku poprawia wydajność z którymi SQL Server można znaleźć wierszy w indeksie, których dotyczy modyfikacji danych.

optymalizator kwerendy możliwość korzystać z widoków indeksowanych podczas przetwarzania kwerendy poprawiła porównaniu ze starszymi wersjami, gdy zarówno kwerendy, jak i w definicji widoku zawiera następujące elementy pasujące:

  • wartość skalarna wyrażenia.Na przykład optymalizator kwerendy można dopasować następujące kwerendy za pomocą wyrażenie wartość skalarna 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 
    

    wartość skalarna wyrażenia zawierające funkcje zdefiniowane przez użytkownika można również dopasować w podobny sposób.

  • Funkcje skalarne agregacja.Na przykład poniższa kwerenda zawierająca wartość skalarna funkcja agregacja liście SELECT:

    SELECT COUNT_BIG (*) FROM dbo.TableT
    

    Można dopasować indeks utworzony w tym widoku:

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

optymalizator kwerendy będzie również należy pamiętać o następujących po jego wybraniu planu kwerendy:

  • Czy przedział wartości zdefiniowanych w predykacie kwerendy mieści się w odstępach zdefiniowanych w widok indeksowany.Na przykład należy wziąć pod uwagę indeks utworzony na poniższej ilustracji:

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

    Teraz należy wziąć pod uwagę następujące kwerendy:

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

    optymalizator kwerendy będzie odpowiadać na tę kwerendę w widoku V1 ponieważ odstęp czasu między 3 i 7 zdefiniowane w objęty kwerendy w przedziale między 1 i 10 zdefiniowane w widok indeksowany.

  • 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 nie jest uwzględniana % i parametry.

    Na przykład optymalizator kwerendy będzie zgodna 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ć, jak przypadek wszystkich indeksów SQL Server decyduje się tylko wtedy, gdy optymalizator kwerendy określa, czy pomaga w tym celu należy użyć widok indeksowany w jego planu kwerend.

Widoki indeksowane mogą być tworzone w żadnej wersji SQL Server 2008. W SQL Server 2008 Flaga, optymalizator kwerendy uznaje automatycznie widok indeksowany. Aby użyć widok indeksowany wszystkie inne wersje, należy użyć wskazówki NOEXPAND tabela.

Wskazówki dotyczące projektowania widok indeksowany.

Widoki indeksowane działają najlepiej, przy rzadko aktualizacji danych źródłowych.Utrzymanie widok indeksowany może być większa niż koszty utrzymania indeksu tabela.Jeśli danych jest często aktualizowana, koszty utrzymania danych widok indeksowany może przewyższają zalety wydajności przy użyciu widok indeksowany.Jeśli danych jest aktualizowana okresowo w plikach wsadowych, ale traktowane zasadniczo jako tylko do odczytu między aktualizacjami, należy rozważyć usunięcie wszystkich widoków indeksowanych przed aktualizacją i przebudowa je później.W ten sposób może zwiększyć wydajność aktualizacji.

Widoki indeksowane zwiększyć wydajność następujące typy kwerend:

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

  • łączyć i agregacja operacje, które są często wykonywane przez wiele kwerendy.

    Na przykład w-transakcji przetwarzania online (OLTP) bazą danych, która jest nagrywany zapasów, wielu kwerend będzie można się spodziewać przyłączyć ProductMaster, ProductVendor, and VendorMaster tabel.Chociaż każdej kwerendy, która wykonuje łączyć to nie może przetwarzać wiele wierszy, ogólny przetwarzania łączyć setki tysięcy takiej kwerendy mogą być istotne.Ponieważ te relacje prawdopodobnie nie ma być często aktualizowane, można lepiej ogólną wydajność całego systemu, definiując widok indeksowany przechowuje wyniki sprzężone.

  • Obciążenie pracą obsługi wspomaganie decyzji.

    Analiza systemów są charakteryzowane przez przechowywanie podsumowań, zagregowane dane, które rzadko są aktualizowane.Ponadto agregowania danych oraz łączenie wielu wierszy charakteryzuje wiele wspomaganie decyzji obsługi kwerend.Ponadto wspomaganie decyzji systemach czasami zawierają szerokości tabel zawierających wiele kolumn lub kolumny, które są duże, lub jedno i drugie.Kwerendy odwołujące się do podzbiór wąskie kolumny te mogą korzystać z widok indeksowany, zawierający tylko kolumny w kwerendzie lub wąskie nadzbiorem tych kolumn.Tworzenia widoków indeksowanych wąskie, zawierających podzbiór kolumny z jednej tabela jest znany jako partycjonowanie pionowe strategii ponieważ dzieli tabel pionowo.Rozważmy na przykład, poniższa tabela i widok indeksowany:

    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ąca kwerenda może udzielić odpowiedzi na tylko przy użyciu 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 może być lepszy do optymalizacji go wybrać jako ścieżka dostępu do rozwiązania poprzedniej kwerendy.

    Jeśli chcesz podzielić pełny spis pionowo, zamiast pewien podzbiór zaleca się użycie indeks nieklastrowany na tabela, która używa klauzulę INCLUDE, aby uwzględnić tylko kolumny, należy zamiast widok indeksowany.Aby uzyskać więcej informacji zobaczCREATE INDEX (języka Transact-SQL).

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

  • Systemy OLTP, w których wiele zapisów.

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

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

  • Agregacji danych o wysokim stopniu liczebność klucz GROUP BY.Wysoki stopień Kardynalność oznacza klucz zawiera wiele różnych wartości.Unikatowy klucz, który ma na najwyższym poziomie Kardynalność, ponieważ każdy klucz zawiera inną wartość.Widoki indeksowane zwiększyć wydajność przez zmniejszenie liczby wierszy w kwerendzie ma dostęp.Jeśli zestaw wyników widoku prawie tyle wierszy w tabela bazowa, przynosi małej wydajności od korzystania z widoku.Na przykład rozważmy następującą kwerendę w tabela, która ma 1000 wierszy:

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

    Jeśli liczebność klucz tabela jest 100, widok indeksowany utworzony za pomocą wynikiem tej kwerendy mają tylko 100 wierszy.Kwerendy używające widoku średnio wymagałoby jedna dziesiąta odczytów, wymagane przed tabela bazowa.Jeśli klucz jest unikatowy klucz, relacja klucza jest 1000 i 1000 wierszy zwraca zestaw wyników widoku.Jeśli w widoku oraz ExampleTable Tabela bazowa wierszy o rozmiarze równym, kwerenda ma nie wydajność uzyskać przy użyciu tego widok indeksowany zamiast odczytywać bezpośrednio w tabeli podstawowej.

  • Rozwijanie sprzężenia.To są widoki, które mają zestaw wyników o rozmiarze większym niż oryginalne dane w tabelach podstawowych.

Łączenie indeksowanych widoki z kwerendy

Mimo że ograniczenia typów widoków, które mogą być indeksowane może uniemożliwić projektowania widoku, który rozwiązuje problem pełną, można zaprojektować wiele widoków indeksowanych mniejszych tej części szybkość procesu.

Należy rozważyć w następujących przykładach:

  • Często wykonywane kwerendy agregatów danych w jednej bazie danych, agregatów danych w innej bazie danych, a następnie łączy wyniki.Ponieważ widok indeksowany nie może odnosić się do tabel z więcej niż jednej bazy danych, można projektować jednego widoku do wykonania całego procesu.Można jednak utworzyć widok indeksowany w każdej bazy danych, które wykonuje agregację dla tej bazy danych.Jeśli można dopasować Optymalizator indeksowanych przegląda przed istniejące kwerendy, co najmniej agregacja przetwarzanie będzie się speeded bez wymogu recode istniejące kwerendy.Chociaż nie jest szybsze przetwarzanie łączyć, ogólny kwerendy jest szybsza, ponieważ zastosowano agregacji, przechowywane w widoków indeksowanych.

  • Często wykonywane kwerendy agregatów dane z kilku tabel, a następnie używa UNION do połączenia wyniki.UNION nie jest dozwolona w widoku indeksowanym.Ponownie można projektować widoki, aby zrobić sobie agregacja poszczególnych operacji.Optymalizator można wybrać widoków indeksowanych, aby przyspieszyć działanie kwerendy bez obowiązku recode kwerendy.Podczas przetwarzania UNION nie większa, są agregacja poszczególnych procesów.

Projektowanie widoków indeksowanych spełniające wiele operacji.Ponieważ Optymalizator służy widok indeksowany, nawet wtedy, gdy nie został określony w klauzula FROM, dobrze widok indeksowany może szybkość przetwarzania kwerend wiele.

Rozważmy na przykład utworzyć indeks na poniższej ilustracji:

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 to bezpośrednio odwołują się kolumny widoku, może również służyć do kwerendy, która jest podstawą kwerendy tabela i zawierać wyrażeń, takich jak SUM(Colx), COUNT_BIG(Colx), COUNT(Colx), a AVG(Colx). Wszystkie kwerendy będą szybciej, ponieważ mają one tylko w celu pobrania niewielka liczba wierszy w widoku zamiast odczytywać pełnej liczby wierszy z tabel podstawowych.

Podobnie utworzony widok indeksowany, agregujący danych i grup w ciągu dnia może służyć do zaspokojenia kwerendy agregacja w kilku różnych zakresów więcej niż 1 dzień, takich jak 7, 30 lub 90 dni.