Rozwiązywanie indeksów dla widoków
Podobnie jak w przypadku dowolnego indeksu SQL Server korzysta z indeksowany widok w swoim planie kwerendy tylko wtedy, gdy określa optymalizator kwerendy jest korzystna czy so.
Widoki indeksowane można tworzyć w dowolnej wersji programu SQL Server.W SQL Server przedsiębiorstwa, optymalizator kwerendy automatycznie uzna indeksowany widok.Aby użyć indeksowany widok wszystkie inne wersje, można użyć wskazówka tabela NOEXPAND.
SQL Serveroptymalizator kwerendy Używa indeksowany widok, gdy spełnione są następujące warunki:
Te opcje sesja są zestaw on:
ANSI_NULLS
SPOWODOWAŁYBY
ANSI_WARNINGS
ARITHABORT
CONCAT_NULL_YIELDS_NULL
QUOTED_IDENTIFIER
Opcja sesja NUMERIC_ROUNDABORT jest zestaw do OFF.
optymalizator kwerendy znajduje dopasowania między kolumny indeksu widoku i elementy w kwerendzie, takie jak:
Predykaty warunek wyszukiwania w klauzula WHERE
Operacje JOIN
Funkcje agregujące
Klauzule Grupuj według
Odwołania do tabel
Szacowany koszt za pomocą indeksu najniższego kosztu mechanizmów dostępu, uznane przez optymalizator kwerendy.
Każdy odwołanie do tabelad w kwerendzie (bezpośrednio lub przez rozwijanie widoku dostęp do jego tabel podstawowych), który odpowiada na odwołanie do tabela w widoku indeksowanym muszą mieć ten sam zbiór wskazówek stosowane, w kwerendzie.
Ostrzeżenie
Wskazówki parametr READCOMMITTED i READCOMMITTEDLOCK są zawsze uważane za różne wskazówki w tym kontekście, niezależnie od bieżącego poziom izolacji transakcji.
Innych niż wymagania wskazówki tabela i ustaw opcje są te same reguły, które używa optymalizator kwerendy, aby określić, czy indeks tabela obejmuje kwerendy.Nic ma określone w kwerendzie w indeksowany widok ma być używany.
Kwerendy nie musi jawnie odwoływać się w klauzula FROM dla indeksowany widok optymalizator kwerendy używać indeksowany widok.Jeśli kwerenda zawiera odwołania do kolumn w tabelach podstawowych, które są również obecne w widoku indeksowanym i optymalizator kwerendy szacuje, że użycie indeksowany widok zapewnia najniższy koszt mechanizm dostępu, optymalizator kwerendy wybiera indeksowany widok, podobnie jak wybiera indeksów tabela bazowa, gdy nie są one bezpośrednio odwołania w kwerendzie.optymalizator kwerendy może wybrać widok, gdy zawiera ona kolumn, które nie odwołuje kwerendy, jak widok oferuje najniższy koszt opcja obejmujące jedną lub więcej kolumn określonych w kwerendzie.
optymalizator kwerendy traktuje w klauzula FROM w widoku standardowym indeksowany widok.optymalizator kwerendy rozwija definicji widoku do kwerendy na początku procesu optymalizacji.Następnie indeksowany widok odpowiedników.indeksowany widok może być używany w plan wykonania ostatecznej wybranego przez optymalizator lub natomiast plan może materialize niezbędne dane z widoku poprzez dostęp do tabel bazowych odwołuje widoku.Optymalizator wybiera alternatywne najniższym koszcie.
Widoki indeksowane przy użyciu wskazówek
Można zapobiec używany dla kwerendy za pomocą kwerendy wskazówkę dotyczącą rozwiń WIDOKÓW indeksów widoku lub wskazówka NOEXPAND tabela można użyć, aby wymusić użycie indeksu dla określonego w klauzula FROM kwerendy indeksowany widok.Jednakże należy pozwolić optymalizator kwerendy dynamicznego określania najlepszych metod dostępu dla każdej kwerendy.Ograniczyć korzystanie z ROZWIJANIA i NOEXPAND do szczególnych przypadków, gdzie badanie wykazało że one znacząco zwiększyć wydajność.
Opcję Rozwiń WIDOKI Określa, że optymalizator kwerendy nie używać żadnych indeksów widoku dla całego kwerendy.
Po określeniu widoku NOEXPAND optymalizator kwerendy uznaje za pomocą żadnych indeksów zdefiniowane w widoku.NOEXPAND z opcjonalnej klauzula indeks() zmusza optymalizator kwerendy do używania określonego indeksy.NOEXPAND można określić tylko dla indeksowany widok i nie można określić dla indeksowany widok nie.
Gdy NOEXPAND ani ROZWIJAĆ WIDOKÓW nie jest określony w kwerendy zawierającej widok, widok jest rozwinięty dostęp do tabel podstawowych.Jeśli kwerenda tworzących widok zawiera wskazówki tabela, te wskazówki są propagowane do tabel.(Ten proces jest wyjaśnione bardziej szczegółowo w Rozdzielczość widoku.) Tak długo, jak zestaw wskazówek, które istnieją w podstawowych tabel widoku są identyczne ze sobą, kwerenda jest uprawnione do indeksowany widok.Większość z czas, te wskazówki będą pasują do siebie, ponieważ są dziedziczone bezpośrednio z widoku.Jednakże jeśli kwerenda odwołuje się do tabel zamiast widoki i wskazówki stosowane bezpośrednio na te tabele nie są identyczne, następnie takiej kwerendy nie kwalifikuje się do dopasowania z indeksowany widok.Wskazówki INDEX, PAGLOCK, ROWLOCK, TABLOCKX, UPDLOCK lub XLOCK stosuje się do tabel w kwerendzie po rozwinięciu widoku, kwerenda nie jest objęty dopasowywanie indeksowany widok.
If a table hint in the form of INDEX (index_val[ ,...n] ) references a view in a query and you do not also specify the NOEXPAND hint, the index hint is ignored.Aby określić użycia określonego indeksu, należy użyć NOEXPAND.
Ogólnie gdy optymalizator kwerendy pasuje do kwerendy indeksowany widok, tabel lub widoków w kwerendzie określony wskazówki są stosowane bezpośrednio w widoku indeksowanym.Jeśli nie chcesz używać indeksowany widok optymalizator kwerendy, wskazówki są propagowane bezpośrednio do tabel w widoku.Aby uzyskać więcej informacji, zobacz Rozdzielczość widoku.Tej propagacji nie stosuje się do łączyć wskazówek.Są stosowane tylko w oryginalnym położeniu w kwerendzie.Sprzężenia wskazówek, nie są uważane za przez optymalizator kwerendy podczas dopasowywania kwerendy do widoków indeksów.Jeżeli plan kwerend używa indeksowany widok, który odpowiada części kwerendy zawierającej łączyć wskazówkę, wskazówka łączyć nie jest używany w planie.
Wskazówki są niedozwolone w definicjach Widoki indeksowane w SQL Server 2008. W trybie zgodności 80 i wyższych SQL Server ignoruje wskazówki wewnątrz definicji indeksowany widok przy zachowaniu ich lub wykonywanie kwerend, które używają indeksowane widoki.Chociaż przy użyciu wskazówek w definicji indeksowany widok nie powodują błąd składni w trybie zgodności 80, są ignorowane.