Indeksy rozpoznawania na widoki

W dowolnej indeksu SQL Server decyduje się tylko wtedy, gdy określa optymalizator kwerendy jest korzystne to zrobić za pomocą widok indeksowany w jego planu kwerend.

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

The SQL Server optymalizator kwerendy uses an widok indeksowany when the following conditions are met:

  • Te opcje sesja są zestaw on:

    • ANSI_NULLS

    • ANSI_PADDING

    • ANSI_WARNINGS

    • ARITHABORT

    • CONCAT_NULL_YIELDS_NULL

    • QUOTED_IDENTIFIER

    • Opcja NUMERIC_ROUNDABORT sesja jest zestaw na OFF.

  • optymalizator kwerendy znajduje dopasowania między kolumny indeksu widoku i elementami w kwerendzie, takie jak:

    • Predykaty warunek wyszukiwania w klauzula WHERE

    • Dołącz operacji

    • Funkcje agregujące

    • Klauzule GROUP BY

    • Odwołania do tabel

  • Szacowany koszt za pomocą indeksu ma najniższy koszt mechanizmów dostępu, uznane przez optymalizator kwerendy.

  • Każdej tabela, do którego odwołuje się kwerenda (bezpośredni lub rozszerzanie w celu uzyskania dostępu do jego tabel podstawowych), który odpowiada na tabela odwołania w widoku indeksowanym muszą mieć ten sam zbiór wskazówek stosowane na nim w kwerendzie.

    Uwaga

    Wskazówki READCOMMITTED i READCOMMITTEDLOCK zawsze są traktowane jako różne wskazówki w tym kontekście, niezależnie od bieżącego poziom izolacji transakcji.

Inne niż wymagania dla opcji zestaw i wskazówki do tabela są to te same reguły, które używa optymalizator kwerendy w celu określenia, czy indeks tabela omówiono kwerendy.Nic poza musi być określone w kwerendzie dla widok indeksowany ma być używany.

Kwerendy nie musi jawnie odwoływać się widok indeksowany w klauzula FROM dla optymalizator kwerendy użyć widoku indeksowanego.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 przy użyciu widoku indeksowanego stanowi najniższy koszt mechanizm dostępu optymalizator kwerendy wybiera widok indeksowany, podobnie jak wybiera indeksów tabela bazowa, gdy nie są one bezpośrednio używany w kwerendzie.optymalizator kwerendy może wybrać widok zawiera kolumny, które nie jest wywoływany przez kwerendę, tak długo, jak w widoku oferuje najniższy koszt opcja obejmującego jeden lub więcej kolumn określonych w kwerendzie.

optymalizator kwerendy traktuje widok indeksowany w klauzula FROM w widoku standardowym.optymalizator kwerendy rozszerza definicji widoku na kwerendę na początku procesu optymalizacji.Następnie dopasowywanie widok indeksowany jest wykonywane.Widok indeksowany, mogą być używane w plan ostatecznego wykonania, wybranego przez optymalizator lub zamiast tego planu może materialize niezbędne dane z widoku po zalogowaniu się do tabel bazowych, do którego odnosi się w widoku.Optymalizator wybiera alternatywne najniższym koszcie.

Wskazówki dotyczące serwerów przy użyciu widoków indeksowanych

Można zapobiec indeksów widoku używany dla kwerendy za pomocą wskazówki dotyczącej kwerendy EXPAND WIDOKÓW lub można użyć wskazówki tabela NOEXPAND wymusić korzystanie z indeksu dla określonych w klauzula FROM kwerendy widok indeksowany.Jednak należy udostępnić optymalizator kwerendy dynamicznego określania najlepszych metod dostępu dla każdej kwerendy.Ograniczyć korzystanie z EXPAND i NOEXPAND do szczególnych przypadkach, gdy badania wykazały poprawiają wydajność znacznie.

Opcja EXPAND WIDOKI Określa, że optymalizator kwerendy nie może używać żadnych indeksów widoku dla całego kwerendy.

Po określeniu NOEXPAND dla widoku optymalizator kwerendy uznaje za pomocą żadnych indeksów zdefiniowane w widoku.Za pomocą opcjonalnej klauzula indeks() określić NOEXPAND zmusza optymalizator kwerendy do używania określonego indeksów.NOEXPAND można określić tylko dla widok indeksowany i nie może być określony dla widok indeksowany nie.

Po NOEXPAND ani WIDOKÓW EXPAND jest określona w kwerendę, która zawiera widok, aby uzyskać dostęp do tabel, rozwinięty widok.Jeśli kwerenda, która tworzy widok zawiera wskazówki dotyczące dowolnej tabela, te wskazówki są propagowane do odpowiednich tabel.(Ten proces omówiono bardziej szczegółowo w Wyświetl rozwiązanie.) Tak długo, jak zestaw wskazówek, które istnieje w podstawowych tabelach w widoku są identyczne ze sobą, kwerenda jest uprawniony do dopasowania z widok indeksowany. W większości przypadków, te wskazówki będzie odpowiadają sobie nawzajem, ponieważ one są dziedziczone bezpośrednio z widoku.Jednak jeśli kwerenda odwołuje się do tabel zamiast widoków i wskazówki, stosowane bezpośrednio na te tabele nie są identyczne, następnie takiej kwerendy jest nieodpowiedni dla zgodności z widok indeksowany.Jeśli wskazówki INDEX, PAGLOCK, ROWLOCK TABLOCKX, UPDLOCK lub XLOCK stosują się do tabel, do którego odwołuje się kwerendę po rozwinięciu widoku, kwerendy nie kwalifikuje się do widok indeksowany dopasowania.

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 rzecz biorąc Jeśli optymalizator kwerendy pasuje do kwerendy widok indeksowany, wszelkie wskazówek na tabel lub widoków w kwerendzie są stosowane bezpośrednio do widok indeksowany.Jeśli nie należy używać widok indeksowany optymalizator kwerendy, wszystkie wskazówki są propagowane bezpośrednio do tabel, do którego odwołuje się w widoku.Aby uzyskać więcej informacji zobaczWyświetl rozwiązanie.Tej propagacji nie ma zastosowania do przyłączenia wskazówek.Są one stosowane tylko w ich pierwotnej pozycji w kwerendzie.łączyć w pamięci podręcznej wskazówek nie są traktowane przez optymalizator kwerendy, podczas dopasowywania kwerendy do indeksowania widoków.Jeżeli plan kwerend używa widok indeksowany odpowiadający części kwerendy zawierającej łączyć wskazówkę, wskazówka łączyć nie jest używany w planie.

Wskazówki dotyczące serwerów są niedozwolone w definicji widoków indeksowanych w SQL Server 2008. W trybie zgodności 80 i nowszy SQL Server ignoruje wskazówki wewnątrz definicji widok indeksowany przy zachowaniu ich lub podczas wykonywania kwerendy używające indeksowania widoków. Chociaż przy użyciu wskazówek w definicji widok indeksowany nie dawać błąd składni w trybie zgodności 80, są one ignorowane.