Using the FORCESEEK Table Hint

Wymusza wskazówkę dotyczącą tabela FORCESEEK optymalizator kwerendy do używania tylko indeks wyszukiwania operacji jako ścieżka dostępu do danych w tabela lub widoku, do którego odwołuje się kwerenda.Aby zastąpić domyślny plan, wybranego przez optymalizator kwerendy w celu uniknięcia problemów z wydajnością spowodowane planu kwerendy nieskuteczne, który można użyć tego wskazówki tabela.Na przykład, jeśli plan zawiera tabela lub indeksu operatory skanowania i odpowiednich tabelach spowodować jest duża liczba odczytów podczas wykonywania kwerendy, jak zaobserwowanych w STATYSTYKI WE/WY danych wyjściowych, wymuszanie indeks wyszukiwania operacji może dać lepszą wydajność kwerendy.Jest to szczególnie istotne, kiedy niedokładne Kardynalność lub kosztów szacunkowych spowodować, że optymalizator do preferować operacji skanowania w czasie kompilacji planu.

Wskazówka FORCESEEK jest stosowana do operacji wyszukiwania w indeksach klastrowanych i nieklastrowanych.Można ją określić dla dowolnej tabeli lub widoku w klauzuli FROM instrukcji SELECT oraz w klauzuli FROM <table_source> instrukcji UPDATE lub DELETE.

Ostrzeżenie

Ponieważ SQL Server optymalizator kwerendy zazwyczaj wybiera najlepszą plan wykonania kwerendy, zaleca się stosowanie wskazówki tylko w ostateczności przez doświadczonych programistów i administratorów bazy danych.

Ocena Query plany dla kryterium FORCESEEK

Wskazówka FORCESEEK tabela może być przydatne, gdy planu kwerendy użyto operatora skanowanie tabela lub indeksu na tabela lub widoku, ale indeks wyszukiwania operator może być bardziej efektywny.Należy wziąć pod uwagę następujące kwerendy i późniejsze wykonanie planu.

Następujący plan wykonania wskazuje, że optymalizator kwerendy wybrany operator skanowanie indeks klastrowany do uzyskiwania dostępu do danych w obu tabelach.

Execution plan with clustered index scan operators

Można wymusić optymalizator kwerendy do wykonywania operacji wyszukiwania na Sales.SalesOrderDetail Tabela, określając FORCESEEK wskazówki, jak to pokazano w następującej kwerendzie.

Następujący plan wykonania pokazuje wyniki przy użyciu wskazówka FORCESEEK w kwerendzie.Indeks klastrowany poszukiwania pracy jest używany do uzyskiwania dostępu do danych w Sales.SalesOrderDetail Tabela.

Execution plan with clustered index seek operator

Unia indeksu i obsługa techniczna zbiorów

Wskazówka FORCESEEK obsługuje związki indeksu i skrzyżowania.Do wskazówkę dotyczącą sprawia, że bardziej prawdopodobne, że zastosowanie następujących technik optymalizator kwerendy.W celu uniknięcia zwalniania kompilacji czas prostych kwerend, związki zawodowe indeksu i skrzyżowania są zazwyczaj tylko do wybranych według zasady tego przełączyć do konta Relacja i selektywność kolumny.Jednak po określeniu wskazówka FORCESEEK te zasady są ominąć i techniki te są zawsze traktowane.Na przykład rozważmy następującą kwerendę:

SELECT * FROM T WITH(FORCESEEK) WHERE T.a = 1 AND T.b = 2;

Jeśli nie ma oddzielnych, nieklastrowany indeksów w kolumnach a i b w tabela T, można wybrać plan przecięcia indeksu. Oznacza to, że plan zawiera indeks nieklastrowany poszukiwania operacji na kolumnach a oraz indeks nieklastrowany operacji na kolumnach b, a przecina wynikowe zestawy kluczy indeksu, przed wykonaniem operacji wyszukiwania w tabela bazowa.

W poniższym przykładzie wybierany jest plan składającej indeksu.Oznacza to, że plan zawiera operacji wyszukiwania kolumna a i operacji wyszukiwania kolumna b, a związki zestawy wynikowe klucz indeksu, przed wykonaniem operacji wyszukiwania w tabela bazowa.

SELECT * FROM T WITH(FORCESEEK) WHERE T.a = 1 OR T.b = 2;

Za pomocą FORCESEEK w bada to użyj LIKE lub w

Reguły optymalizator kwerendy i Szacowanie Słaba relacja może powodować również optymalizatora do wykonywania operacji wyszukiwania tabela lub indeks, a nie indeks przeszukiwania, gdy kwerenda używa w lub LIKE jako predykaty wyszukiwania.

Poniższy przykład ilustruje sposób wskazówka FORCESEEK można życie optymalizator kwerendy do wykonywania indeks poszukiwania pracy zamiast skanowanie tabela, kiedy LIKE lub w są używane jako predykaty wyszukiwania.Aby wyświetlić planów wykonanie kwerendy, kliknij przycisk Zawierają rzeczywiste plan wykonanie przycisku paska narzędzi przed uruchomieniem w przykładzie.

USE tempdb;
GO
DROP TABLE t;
GO
CREATE TABLE t(i int UNIQUE, j int, vc varchar(100));
CREATE INDEX t_vc ON t(vc);
GO
DECLARE @p1 int, @p2 int, @p3 int, @p4 int, @p5 int;
SELECT * FROM t WHERE i IN (@p1, @p2, @p3, @p4, @p5);
GO
DECLARE @p1 int, @p2 int, @p3 int, @p4 int, @p5 int;
SELECT * FROM t WITH (FORCESEEK) WHERE i IN (@p1, @p2, @p3, @p4, @p5);
GO
SELECT * FROM t WHERE vc LIKE 'Test%';
GO
SELECT * FROM t WITH (FORCESEEK) WHERE vc LIKE 'Test%';
GO
DECLARE @vc varchar(100);
SELECT * FROM t WHERE vc LIKE @vc;
GO
DECLARE @vc varchar(100);
SELECT * FROM t WITH (FORCESEEK) where vc like @vc;
GO

Za pomocą FORCESEEK na widoki

FORCESEEK może być określona z lub bez wskazówką indeksu.Po zastosowaniu tabela wskazówkę dotyczącą FORCESEEK do widoku lub widok indeksowany, wskazówka FORCESEEK jest cyklicznie propagowane przez wszystkie tabele w rozszerzoną wersją widoku.Wskazówka indeksu, jest ignorowana.Jeśli tabel, nie ma co najmniej jeden indeks, plan nie zostanie znaleziony i zwracany jest błąd 8622.

Podczas używania wskazówki FORCESEEK i NOEXPAND są ze sobą na odwołanie do widoku indeksowanego, nie rozwijając go najpierw jest używany widok indeksowany.Wskazówka FORCESEEK jest stosowane bezpośrednio do widok indeksowany, który jest traktowany jak tabela.

Jeśli stosujesz wskazówkę dotyczącą FORCESEEK w odwołanie tabela, odwołanie tabela nie może uczestniczyć w pasujące do widok indeksowany.Jednak inne części kwerendy, to nie ma wpływu FORCESEEK wskazówki mogą uczestniczyć w widok indeksowany dopasowania.To jest porównywalna z zachowaniem widok indeksowany zgodne z wskazówki INDEX.

Najważniejsze zagadnienia dotyczące zgodności

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

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

    Aktualne statystyk umożliwiają Optymalizator dokładnie ocenić koszt planów innej kwerendy, a następnie wybierz polecenie 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.

  • Ocena kwerendy dla zapasów, które mogą powodować słabą Kardynalność lub oszacowań kosztów i usunąć te elementy, jeśli jest to możliwe.Na przykład zastąpić zmiennych lokalnych parametry, albo literały i ograniczyć korzystanie z funkcji multi-instrukcja wycenione tabela i zmienne tabela w kwerendzie.Aby uzyskać więcej informacji na temat innych elementów do wyszukiwania zobacz Statystyki użycia przez optymalizator kwerendy w roku 2005 Microsoft SQL Server.

  • Nie należy bez potrzeby używać wskazówki INDEX w połączeniu z FORCESEEK.Oznacza to jeśli FORCESEEK samego planu wystarczające, również za pomocą wskazówki INDEX może nadmiernie ograniczyć możliwości wyboru ma Optymalizator.Ponadto wskazówką INDEX spowoduje, że z błędami kwerendy 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.