Udostępnij za pośrednictwem


Using the INDEX and FORCESEEK Query Hints in Plan Guides

Indeks i FORCESEEK wskazówki tabela można określić jako wskazówki kwerendy.Po określeniu jako wskazówki kwerendy te wskazówki zachowywać się ten sam sposób jak wskazówką wierszu tabela lub widoku.

Wskazówki INDEX zmusza optymalizator kwerendy do używania tylko określonych indeksów dostępu do danych w tabela, do którego istnieje odwołanie lub widoku w kwerendzie.Wskazówka FORCESEEK zmusza optymalizator używać tylko do indeksu wyszukiwania operacji dostępu do danych w widoku lub tabela, do którego istnieje odwołanie.Te wskazówki można użyć w klauzula OPTION plan wykonania kwerendy wpływać optymalizacji kwerendy.Jeśli kwerenda jest taki sam, jak plan wykonania kwerendy, klauzula opcja określona w plan wykonania kwerendy zostanie dodany do kwerendy przed jej kompiluje i optymalizuje.Aby uzyskać więcej informacji na temat prowadnic planu zobacz Understanding Plan Guides.

Ostrzeżenie

Prowadnice planu niewłaściwym użyciem wskazówki kwerendy może być przyczyną problemów kompilacji, wykonywania i wydajności.Linie pomocnicze planu należy używać tylko przez doświadczonych programistów i administratorów bazy danych.

Wskazówki INDEX i FORCESEEK dla tabeli określone jako wskazówki kwerendy są prawidłowe dla następujących obiektów:

  • Tabele

  • Widoki

  • Indeksowane widoki

  • Zastępuje maksymalny stopień proste opcja konfiguracja sp_configure i zasób Governor dla kwerendy, zaznaczenie tej opcji.

  • Wskazówka dotycząca kwerendy MAXDOP mogą przekraczać wartości skonfigurowano sp_configure.

  • Nazwane podkwerendy

Wskazówki dotyczące tabeli nie mogą być określone dla zmiennych Tabela, wyceniane tabeli funkcji lub OPENROWSET instrukcji.

Aby określić wskazówką indeksu dla widok indeksowany, wskazówka NOEXPAND musi być określona w OPTION klauzula, inaczej Wskazówka indeksu jest ignorowana.Aby uzyskać więcej informacji zobaczIndeksy rozpoznawania na widoki.

Aby uzyskać informacje na temat składni, używane do określania wskazówki INDEX i FORCESEEK jako kwerendy wskazówki zobacz Query Hints (Transact-SQL).

Najważniejsze wskazówki

Firma Microsoft zaleca następujące wskazówki:

  • Podczas testowania instrukcji plan wykonania kwerendy, należy użyć wskazówki INDEX i FORCESEEK jako wskazówki kwerendy tylko w odniesieniu do plan wykonania kwerendy ani w kwerendach ad-hoc.Dla wszystkich innych kwerend ad hoc należy określić te wskazówki jako wskazówki do tabela.

  • Przed użyciem wskazówka FORCESEEK, upewnij się, że statystyki dotyczące bazy danych są bieżące i dokładne.

    Aktualne statystyk umożliwiają Optymalizator dokładnie oceny koszt kwerendy będą inne plany i wybierz plan wysokiej jakości.Dlatego zaleca się ustawienie AUTO_CREATE_STATISTICS i AUTO_UPDATE_STATISTICS do ON (ustawienie domyślne) dla każdej baza danych użytkownika.Można także ręcznie można aktualizować dane statystyczne dotyczące tabela lub widoku za pomocą AKTUALIZACJA STATYSTYK instrukcja.

  • Nie należy bez potrzeby używać wskazówki INDEX w połączeniu z FORCESEEK.Oznacza to jeśli FORCESEEK samego planu, który jest odpowiedni, również za pomocą wskazówki INDEX może nadmiernie ograniczyć wybór przez optymalizator.Ponadto wskazówką INDEX spowoduje, że kwerenda nie powiedzie się po zmianie schematu fizyczne tabela wyeliminować określony w do wskazówkę dotyczącą indeks.Z drugiej strony tak długo, jak istnieje co najmniej jeden indeks można używać w tabela, dla którego stosowana jest wskazówka FORCESEEK, kwerendy będzie kompilować nawet w przypadku zmiany struktur z indeksu.

  • Nie należy używać z podpowiedzi FORCESEEK wskazówki INDEX INDEX (0).Indeks (0) powoduje skanowanie tabela bazowa.Gdy używana z FORCESEEK, plan nie zostanie znaleziony i zwracany jest błąd 8622.

  • Nie należy używać wskazówki dotyczącej kwerendy USE PLAN z podpowiedzi FORCESEEK.W takim wypadku wskazówka FORCESEEK jest ignorowana.

Indeks i wskazówki FORCESEEK przy użyciu innych wskazówki do tabela

Wskazówki INDEX i FORCESEEK mogą być określone dla kwerendy, która nie ma żadnych istniejących wskazówki tabela lub mogą być używane do zastąpienia jednego lub kilku istniejących indeks lub FORCESEEK wskazówki w kwerendzie.Jeśli kwerendy, która zostanie dopasowany do plan wykonania kwerendy już zawiera klauzulę WITH Określanie tabela tych wskazówek, wskazówki określona @ wskazówki parametr plan wykonania kwerendy zastąpią w kwerendzie.Na przykład, jeśli kwerenda zawiera wskazówkę dotyczącą tabeli WITH INDEX (PK_Employee_EmployeeID) dla HumanResources.Employee Tabela i @ wskazówki Określa, parametr plan wykonania kwerendyOPTION (TABLE HINT ( HumanResources.Employee, INDEX( IX_Employee_ManagerID ) ), optymalizator kwerendy będzie używał IX_Employee_ManagerID Indeks.

Wskazówki dla tabeli inne niż INDEX i FORCESEEK są niedozwolone jako wskazówki kwerendy w przewodniku planu, chyba że kwerenda zawiera już klauzulę WITH określającą wskazówkę dla tabeli.W takim przypadku w celu zachowania semantyki kwerendy odpowiednią wskazówkę należy również określić jako wskazówkę kwerendy, używając klauzuli TABLE HINT w klauzuli OPTION.Jeśli na przykład kwerenda zawiera wskazówkę dla tabeli NOLOCK, parametr @hints przewodnika planu, oprócz wskazówek dla tabeli INDEX i FORCESEEK w klauzuli OPTION, musi również zawierać wskazówkę NOLOCK.Zobacz Przykład C w dalszej części tego tematu.Jeśli wskazówka dla tabeli inna niż INDEX lub FORCESEEK jest określona za pomocą klauzuli TABLE HINT w klauzuli OPTION bez odpowiedniej wskazówki kwerendy lub na odwrót, jest zgłaszany błąd 8702, który wskazuje, że klauzula OPTION może spowodować zmianę semantyki kwerendy, a wykonywanie kwerendy kończy się niepowodzeniem.

Indeks i wskazówki FORCESEEK przy użyciu innych wskazówki kwerendy

Jeśli kwerendę, która zostanie dopasowany do plan wykonania kwerendy już zawiera klauzulę OPTION określanie wskazówek kwerendy, wskazówki kwerendy określona @ wskazówki parametr plan wykonania kwerendy zastąpią w kwerendzie.Podręcznik plan wykonania kwerendy do kwerendy, która już zawiera klauzulę OPTION, użytkownik musi jednak zawierać klauzula OPTION kwerendy po określeniu tekst kwerendy, aby odpowiadały one sp_create_plan_guide (języka Transact-SQL) Instrukcja. Jeśli chcesz, aby wskazówki, określone w podręczniku plan ma zostać dodana do wskazówek, które już istnieją na kwerendy, zamiast zastępować, należy określić zarówno oryginalnego wskazówki, jak i dodatkowe wskazówki dotyczące w klauzula OPTION plan wykonania kwerendy.

Przykłady

A.Użycie wskazówki FORCESEEK

W poniższym przykładzie użyto wskazówka FORCESEEK w @hints Parametr plan wykonania kwerendy. Ta opcja zmusza optymalizator używać indeksu wyszukiwania operacji dostępu do danych w HumanResources.Employee Tabela. Należy zauważyć, że może to spowodować Optymalizator używać innych niż określona w tabela Wskazówka indeksu.

B.RECOMPILE jest również przydatna podczas tworzenia planu prowadnic.

Poniższy przykład dotyczy wskazówki INDEX jednej tabela i wskazówki FORCESEEK do innego.

C.Określanie wpływu na semantyka wskazówki

Za pomocą PLAN NIEZAWODNE, można poinstruować optymalizator kwerendy, aby nie należy wziąć pod uwagę wszystkie plany kwerend, które można napotkać ten problem. NOLOCK, czyli semantycznego wpływu na, a indeks, czyli innych niż semantycznej — na. Aby zachować semantyka kwerendy, wskazówka NOLOCK jest określony w klauzula OPTIONS plan wykonania kwerendy.Oprócz wskazówka NOLOCK wskazówki INDEX i FORCESEEK są określone i zastąpić wskazówki INDEX nie semantycznej — na kwerendy po instrukcja jest skompilowany i zoptymalizowany.

W poniższym przykładzie przedstawiono alternatywną metodą zachowania semantyka kwerendy i umożliwiając Optymalizator wybrać indeks innych niż określone w tabela wskazówki indeksu.Można to zrobić, określając wskazówka NOLOCK w klauzula OPTIONS (ponieważ jest on semantycznego wpływu na) i określanie słowem kluczowym tabela wskazówka tylko odwołanie tabela i nie wskazówki INDEX.

D.Zmusza optymalizator kwerendy, aby spróbować planu, który działa w przypadku potencjalnych wiersza rozmiar maksymalny, prawdopodobnie na koszt o wydajności.

W poniższym przykładzie pokazano, jak używać wskazówka tabela bez określenia wskazówką INDEX aby zastąpić to zachowanie wskazówkę dotyczącą tabela indeks określone w klauzula FROM kwerendy.Ta metoda umożliwia Optymalizator wybrać indeks innych niż określone w tabela wskazówki indeksu.