Wskazówki do tabela (języka Transact-SQL)

0 = Bazy danych jest za pomocą sortowanie systemu Windows

Ostrzeżenie

0 = SQL Server Identyfikator zamówienia sortowania

Stosuje się do:

USUWANIE

Aby wyświetlić właściwości operator plan wykonania

WYBIERZ OPCJĘ

AKTUALIZACJA

KORESPONDENCJI SERYJNEJ

Topic link iconKonwencje składni języka Transact-SQL

WITH ( <table_hint> [ [ , ]...n ] )

<table_hint> ::= 
[ NOEXPAND ] { 
    INDEX ( index_value [ ,...n ] ) | INDEX = ( index_value )
  | FASTFIRSTROW 
  | FORCESEEK
  | HOLDLOCK 
  | NOLOCK 
  | NOWAIT
  | PAGLOCK 
  | READCOMMITTED 
  | READCOMMITTEDLOCK 
  | READPAST 
  | READUNCOMMITTED 
  | REPEATABLEREAD 
  | ROWLOCK 
  | SERIALIZABLE 
  | TABLOCK 
  | TABLOCKX 
  | UPDLOCK 
  | XLOCK 
} 

<table_hint_limited> ::=
{
    KEEPIDENTITY 
  | KEEPDEFAULTS 
  | FASTFIRSTROW 

  | HOLDLOCK 
  | IGNORE_CONSTRAINTS 
  | IGNORE_TRIGGERS 
  | NOWAIT
  | PAGLOCK 
  | READCOMMITTED 
  | READCOMMITTEDLOCK 
  | READPAST 
  | REPEATABLEREAD 
  | ROWLOCK 
  | SERIALIZABLE 
  | TABLOCK 
  | TABLOCKX 
  | UPDLOCK 
  | XLOCK 
} 

Argumenty

  • WITH (table_hint < >) [,... n
    Z kilkoma wyjątkami wskazówki dotyczące tabeli są obsługiwane w klauzuli FROM tylko wtedy, gdy wskazówki są określone za pomocą słowa kluczowego WITH.Wskazówki dotyczące tabeli muszą być też określone przy użyciu nawiasów.

    Important noteImportant Note:

    OFFLINE = bazy danych został jawnie trybu offline.This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

    Następujące wskazówki dotyczące tabeli są dopuszczalne ze słowem kluczowym WITH lub bez niego: NOLOCK, READUNCOMMITTED, UPDLOCK, REPEATABLEREAD, SERIALIZABLE, READCOMMITTED, FASTFIRSTROW, TABLOCK, TABLOCKX, PAGLOCK, ROWLOCK, NOWAIT, READPAST, XLOCK i NOEXPAND.Gdy te wskazówki dotyczące tabeli są określone bez słowa kluczowego WITH, powinny być określone samodzielnie.Na przykład:

    FROM t (TABLOCK)
    

    AWARYJNE = baza danych jest w sytuacji awaryjnej, odczytać — tylko należy podać.

    FROM t WITH (TABLOCK, INDEX(myindex))
    

    Dostęp jest ograniczony do członków sysadmin

    Important noteImportant Note:

    UpdateabilityThis feature will be removed in a future version of Microsoft SQL Server. Do not use this feature in new development work, and modify applications that currently use this feature as soon as possible.

    Wskazuje, czy dane mogą być modyfikowane.

  • TYLKO_DO_ODCZYTU = danych można odczytać, ale nie można ich modyfikować.
    READ_WRITE = odczytywać i modyfikować danych.UserAccessOkreśla, którzy użytkownicy mogą uzyskać dostęp do bazy danych.Aby uzyskać więcej informacji zobacz Spostrzeżenia.

  • Indeks (I ndex_value ,... n ] RESTRICTED_USER = tylko członkowie ról db_owner dbcreator oraz sysadminindex_value
    Składnia INDEX() określa nazwy lub identyfikatory jednego lub więcej indeksów do użycia przez optymalizator kwerendy, gdy przetwarza on instrukcję.Alternatywna składnia INDEX = określa pojedynczą wartość indeksu.Można określić tylko jedną wskazówkę dotyczącą indeksu na tabelę.

    Jeśli istnieją indeksy klastrowane, zapis INDEX(0) wymusza skanowanie indeksu klastrowanego, a zapis INDEX(1) wymusza skanowanie lub przeszukiwanie indeksu klastrowanego.Jeśli nie istnieją indeksy klastrowane, zapis INDEX(0) wymusza skanowanie tabeli, a zapis INDEX(1) jest interpretowany jako błąd.

    Jeśli w jednej liście wskazówek jest używanych wiele indeksów, duplikaty są ignorowane, a pozostałe wymienione indeksy są używane do pobierania wierszy tabeli.Kolejność indeksów we wskazówce indeksu jest istotna.Wskazówka wielu indeksów wymusza także łączenie indeksów za pomocą operacji AND, a optymalizator kwerendy stosuje maksymalną liczbę możliwych warunków w odniesieniu do każdego używanego indeksu.Jeśli zestaw indeksów ze wskazówkami nie zawiera wszystkich kolumn, do których odwołuje się kwerenda, wykonywane jest pobieranie w celu odczytania pozostałych kolumn po tym, jak program SQL Server Database Engine odczyta wszystkie indeksowane kolumny.

    Uwaga

    Gdy wskazówka indeksu odwołująca się do wielu indeksów zostanie użyta w odniesieniu do tabeli faktów w sprzężeniu typu gwiazda, optymalizator ignoruje wskazówkę indeksu i zwraca ostrzeżenie.Niedozwolone jest także łączenie indeksów za pomocą operacji OR w odniesieniu do tabeli z określoną wskazówką indeksu.

    Maksymalna liczba indeksów we wskazówce dotyczącej tabeli to 250 nieklastrowanych indeksów.

  • KEEPIDENTITY
    Następujący przykład cykli Dziennik błędów agenta.

    Określa, że wartość lub wartości tożsamości w importowanym pliku danych będą używane w kolumnie tożsamości.Jeśli nie zostanie określona opcja KEEPIDENTITY, wartości tożsamości dla tej kolumny zostaną zweryfikowane, ale nie zostaną zaimportowane, a optymalizator kwerendy automatycznie przypisze unikatowe wartości na podstawie wartości inicjatora i przyrostu określonych podczas tworzenia tabeli.

    Important noteImportant Note:

    Jeśli plik danych nie zawiera wartości dla kolumny tożsamości w tabeli lub w widoku i kolumna tożsamości nie jest ostatnią kolumną w tabeli, należy pominąć kolumnę tożsamości.Aby uzyskać więcej informacji, zobacz Using a Format File to Skip a Data Field.Jeśli kolumna tożsamości zostanie pomyślnie pominięta, optymalizator kwerendy automatycznie przypisze unikatowe wartości dla kolumny tożsamości zaimportowanym wierszom tabeli.

    Dla przykładu, w którym użyto tej wskazówki do instrukcji INSERT...SELECT * FROM OPENROWSET(BULK...), zobacz Keeping Identity Values When Bulk Importing Data.

    Aby uzyskać informacje na temat sprawdzania wartości tożsamości dla tabela zobacz DBCC CHECKIDENT (Transact-SQL).

  • KEEPDEFAULTS
    Następujący przykład cykli Dziennik błędów agenta.

    Jeśli jest używana opcja FORCE, ponownego wygenerowania klucz będzie kontynuowana, nawet w przypadku klucz głównego jest niedostępna lub serwer nie może odszyfrować wszystkich szyfrowanych kluczy prywatnych.

    Dla przykładu, w którym użyto tej wskazówki do instrukcji INSERT...SELECT * FROM OPENROWSET(BULK...), zobacz Keeping Nulls or Using Default Values During Bulk Import.

  • FASTFIRSTROW
    Opcja DROP szyfrowanie BY usługa MASTER klucz usuwa szyfrowanie klucz głównego bazy danych przez usługa klucz głównego.Aby uzyskać więcej informacji zobaczQuery Hints (Transact-SQL).

    Important noteImportant Note:

    This feature will be removed in the next version of Microsoft SQL Server. Do not use this feature in new development work, and modify applications that currently use this feature as soon as possible.

  • FORCESEEK
    Klucz główny bazy danych zaszyfrowanych przy użyciu hasła, wiedza tego hasła jest również wymagane.

    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, MERGE lub DELETE.

    Wskazówkę FORCESEEK można określić ze wskazówką INDEX lub bez niej.W wypadku połączenia ze wskazówką indeksu optymalizator kwerendy uwzględnia jedynie ścieżki dostępu przeszukiwania w określonym indeksie.Jeśli wskazówka FORCESEEK spowoduje, że nie zostanie znaleziony żaden plan, zostanie zwrócony błąd 8622.Aby uzyskać więcej informacji, zobacz Using the FORCESEEK Table Hint.

  • HOLDLOCK
    KILL QUERY powiadomienie subskrypcja (języka Transact-SQL)Usuwa kwerendę subskrypcji powiadomienie z tego wystąpienie.Ta instrukcja można usunąć subskrypcja określonych lub wszystkich subskrypcja.Usuwa wszystkie subskrypcje w wystąpienie.

  • IGNORE_CONSTRAINTS
    Następujący przykład cykli Dziennik błędów agenta.

    Określa, że dowolne ograniczenia dotyczące tabeli są ignorowane przez operację importu zbiorczego.Domyślnie instrukcja INSERT sprawdza ograniczenia CHECK i FOREIGN KEY.Gdy zostanie określona opcja IGNORE_CONSTRAINTS dla operacji importu zbiorczego, instrukcja INSERT musi zignorować te ograniczenia w odniesieniu do docelowej tabeli.Należy zauważyć, że nie można wyłączyć ograniczeń UNIQUE, PRIMARY KEY lub NOT NULL.

    Usuwanie wszystkich subskrypcji powiadomienie kwerendy w wystąpienieWyłączenie ograniczenia wyboru i klucz obcy, importować dane i następnie przy użyciu Transact-SQL instrukcje oczyszczania danych.

    Jeśli jednak zostaną zignorowane ograniczenia CHECK i FOREIGN KEY, każde zignorowane ograniczenie dotyczące tabeli jest oznaczane jako is_not_trusted w widoku wykazu sys.check_constraints lub sys.foreign_keys po operacji.W pewnym momencie należy sprawdzić ograniczenia dotyczące całej tabeli.Jeśli tabela była pusta przed operacją importu zbiorczego, koszt ponownego sprawdzenia poprawności ograniczenia może przewyższyć koszt zastosowania ograniczeń CHECK i FOREIGN KEY w odniesieniu do danych przyrostowych.

  • IGNORE_TRIGGERS
    Następujący przykład cykli Dziennik błędów agenta.

    Określa, że wszelkie wyzwalacze zdefiniowane dla tabeli są ignorowane przez operację importu zbiorczego.Domyślnie instrukcja INSERT stosuje wyzwalacze.

    Wskazówki IGNORE_TRIGGERS należy używać tylko wtedy, gdy aplikacja nie zależy od wyzwalaczy i gdy maksymalizacja wydajności nie jest ważna.

  • NOLOCK
    tessellation_schemeNazwa schematu tesselacją, jeden z:

    Uwaga

    GEOMETRY_GRIDThis feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

  • NOWAIT
    Powoduje, że Database Engine Aby przywrócić wiadomości natychmiast po napotkaniu blokadę w tabela. bounding_box_xmin

  • PAGLOCK
    Stosuje blokadę strony, wtedy gdy zazwyczaj są stosowane jednostkowe blokady wierszy lub kluczy lub gdy stosowana jest blokada jednej tabeli.Domyślnie używa trybu blokowania odpowiedniego do operacji.Jeśli jest określona w transakcjach działających na poziomie izolacji SNAPSHOT, nie są stosowane blokady strony, chyba że wskazówka PAGLOCK jest połączona z innymi wskazówkami dotyczącymi tabeli wymagającymi blokad, takimi jak UPDLOCK i HOLDLOCK.

  • READCOMMITTED
    bounding_box_yminJeśli opcja bazy danych READ_COMMITTED_SNAPSHOT jest wyłączona, Database Engine nabywa blokad udostępniony jako dane jest w trybie odczytu i zwalnia te blokady, po zakończeniu operacji odczytu. Jeśli opcja bazy danych READ_COMMITTED_SNAPSHOT jest włączone, Database Engine nie nabywa blokady i używa wersji wiersza. Aby uzyskać więcej informacji na temat poziomów izolacji zobacz SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

    Uwaga

    GEOMETRY_GRIDThis feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

  • READCOMMITTEDLOCK
    Współrzędną X w prawym górnym rogu pole ograniczenia, jeden z:The Database Engine acquires shared locks as data is read and releases those locks when the read operation is completed, regardless of the setting of the READ_COMMITTED_SNAPSHOT database option.Aby uzyskać więcej informacji na temat poziomów izolacji zobacz SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

  • READPAST
    Określa, że Database Engine nie odczytuje wierszy zablokowanych przez inne transakcje.W większości sytuacji dotyczy to także stron.Gdy jest określona wskazówka READPAST, pomijane są zarówno blokady na poziomie strony, jak i wiersza.Oznacza to, że Database Engine pomija wiersze i strony zamiast blokować bieżącą transakcję do czasu zwolnienia blokad.Załóżmy na przykład, że tabela T1 zawiera jedną kolumnę liczb całkowitych z wartościami 1, 2, 3, 4, 5.Jeśli transakcja A zmieni wartość 3 na 8, ale nie została jeszcze zatwierdzona, instrukcja SELECT * FROM T1 (READPAST) da wartości 1, 2, 4, 5.Wskazówka READPAST jest używana przede wszystkim w celu ograniczenia rywalizacji o blokady podczas implementowania kolejki pracy używającej tabeli SQL Server.Czytnik kolejki używający wskazówki READPAST pomija wpisy kolejki zablokowane przez inne transakcje, przechodząc do następnego dostępnego wpisu kolejki, dzięki czemu nie musi czekać, aż inne transakcje zwolnią blokady.

    Wskazówkę READPAST można określić dla dowolnej tabeli, do której odwołują się instrukcje UPDATE lub DELETE oraz dla dowolnej tabeli, do której ma miejsce odwołanie w klauzuli FROM.Gdy wskazówka READPAST jest określona w instrukcji UPDATE, jest stosowana jedynie podczas odczytywania danych w celu zidentyfikowania rekordów, które mają zostać zaktualizowane, niezależnie od tego, w którym miejscu instrukcji jest ona określona.Wskazówki READPAST nie można określić dla tabel w klauzuli INTO instrukcji INSERT.Operacje odczytu używające wskazówki READPAST nie powodują blokowania.Operacje aktualizowania i usuwania używające wskazówki READPAST mogą powodować blokowanie podczas odczytywania kluczy obcych lub indeksowanych widoków albo podczas modyfikowania indeksów pomocniczych.

    level_2_gridGęstość siatki dla siatki drugiego poziom.

    Wartość NULL = nie stosuje się do danego schematu typu lub tesselacją przestrzennej indeksu

    • level_2_grid_desc

    • Gęstość siatki dla siatki drugiego poziom, jeden z:

    level_3_grid

  • READUNCOMMITTED
    level_3_grid_descGęstość siatki dla siatki poziom 3, jeden z:level_4_gridGęstość siatki dla siatki poziom 4.Aby uzyskać więcej informacji na temat zabrudzony odczytów nonrepeatable operacje odczytu i fantomu odczytów, zobacz Efekty współbieżność.

    Wskazówki READUNCOMMITTED i NOLOCK mają zastosowanie jedynie do blokad danych.Wszystkie kwerendy, w tym te ze wskazówkami READUNCOMMITTED i NOLOCK, uzyskują blokady Sch-S (stabilność schematu) podczas kompilowania i wykonywania.Z tego powodu kwerendy są blokowane, gdy współbieżna transakcja ma blokadę Sch-M (modyfikacja schematu) w tabeli.Na przykład operacje języka definicji danych (DDL) uzyskują blokadę Sch-M przed zmodyfikowaniem informacji schematu tabeli.Wszelkie współbieżne kwerendy, w tym uruchamiane ze wskazówkami READUNCOMMITTED lub NOLOCK, są blokowane podczas próby uzyskania blokady Sch-S.I odwrotnie, kwerenda mająca blokadę Sch-S blokuje współbieżną transakcję, która próbuje uzyskać blokadę Sch-M.Aby uzyskać więcej informacji na temat zachowania blokad, zobacz temat Lock Compatibility (Database Engine).

    Jest to nazwa wyzwalacza i schemat do której on należy, jeśli to możliwe, której zamówienie jest zestaw lub zmienić.The SQL Server optymalizator kwerendy ignores the READUNCOMMITTED and NOLOCK hints in the FROM klauzula that apply to the miejsce docelowe tabela of an UPDATE or DELETE instrukcja.

    Uwaga

    Obsługa użycia wskazówek READUNCOMMITTED i NOLOCK w klauzuli FROM mających zastosowanie do docelowej tabeli instrukcji UPDATE lub DELETE zostanie usunięta w przyszłej wersji programu SQL Server.Należy unikać stosowania tych wskazówek w tym kontekście w nowych projektach oraz zaplanować modyfikację aplikacji, w których obecnie są stosowane.

    Można zminimalizować rywalizację o blokady, chroniąc transakcje przed zakłóconymi odczytami niezatwierdzonych modyfikacji danych, używając następujących zabiegów:

    • Poziom izolacji READ COMMITTED z opcją bazy danych READ_COMMITTED_SNAPSHOT ustawioną jako ON.

    • Poziom izolacji migawka.

    Aby uzyskać więcej informacji na temat poziomów izolacji zobacz SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

    Uwaga

    Wyzwalacz jest uruchamiany jako pierwsze.

  • REPEATABLEREAD
    Wyzwalacz jest uruchamiany w celu niezdefiniowany.Aby uzyskać więcej informacji na temat poziomów izolacji zobacz SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

  • ROWLOCK
    Określa, że są stosowane blokady wierszy tam, gdzie normalnie są stosowane blokady stron lub tabel.Jeśli jest określona w transakcjach działających na poziomie izolacji SNAPSHOT, nie są stosowane blokady wierszy, chyba że wskazówka ROWLOCK jest połączona z innymi wskazówkami dotyczącymi tabeli wymagającymi blokowania, takimi jak UPDLOCK i HOLDLOCK.

  • MOŻLIWY DO SERIALIZACJI
    Równoważna wskazówce HOLDLOCK.Powoduje, że blokady współużytkowane są bardziej restrykcyjne przez utrzymywanie ich do czasu ukończenia transakcji, zamiast zwalniania współużytkowanej blokady, gdy tylko wymagana tabela lub strona danych nie jest już potrzebna niezależnie od tego, czy transakcja została ukończona.Skanowanie jest wykonywane z tą samą semantyką, z jaką działa transakcja na poziomie izolacji SERIALIZABLE.Aby uzyskać więcej informacji na temat poziomów izolacji, zobacz SET TRANSACTION ISOLATION LEVEL (Transact-SQL).

  • TABLOCK
    Określa, że blokady współużytkowane są utrzymywane w odniesieniu do tabeli do czasu zakończenia instrukcji.Jeśli jest także użyta wskazówka HOLDLOCK, współużytkowana blokady tabeli jest utrzymywana do czasu zakończenia transakcji.

    Podczas importowania danych do sterty za pomocą instrukcji INSERT INTO <tabela_docelowa> SELECT <kolumny> FROM <tabela_źródłowa> można włączyć zoptymalizowane rejestrowanie i blokowanie dla instrukcji, określając wskazówkę TABLOCK dla docelowej tabeli.Dodatkowo model odzyskiwania bazy danych musi zostać ustawiony jako prosty lub z rejestrowaniem zbiorczym.Aby uzyskać więcej informacji, zobacz INSERT (Transact-SQL).

    W przypadku użycia z OPENROWSET zbiorczej dostawca zestawu zestaw wierszy do importowania danych do tabela, umożliwia TABLOCK wielu klientów jednocześnie załadować dane do tabela miejsce docelowe, zoptymalizowaną rejestrowania i blokowania.Aby uzyskać więcej informacji zobaczPrerequisites for Minimal Logging in Bulk Import.

  • TABLOCKX
    Określa, że w odniesieniu do tabeli jest stosowana blokada na wyłączność.

  • UPDLOCK
    Replikacja automatycznie generuje pierwszego wyzwalacza dla każdej tabela, która znajduje się w natychmiastowej aktualizacji lub subskrypcja aktualizacji w kolejce.

  • XLOCK
    Określa, że mają być stosowane blokady na wyłączność i utrzymywane do czasu zakończenia transakcji.Jeśli określona ze wskazówką ROWLOCK, PAGLOCK lub TABLOCK, są stosowane blokady na wyłączność do odpowiedniego poziomu ziarnistości.

Remarks

Wskazówki dotyczące tabeli są ignorowane, jeśli dostęp do tabeli nie jest uzyskiwany przez plan kwerendy.To może być spowodowane przez optymalizator, który zadecydował, że nie będzie miał miejsca dostęp do tabeli albo ponieważ zamiast tego będzie miał miejsce dostęp do indeksowanego widoku.W drugim wypadku dostęp do widoku indeksowanego może zostać wykluczony przez użycie wskazówki dotyczącej kwerendy OPTION (EXPAND VIEWS).

Wszystkie wskazówki dotyczące blokady są propagowane do wszystkich tabel i widoków, do których ma miejsce dostęp przez plan kwerendy, w tym do tabel i widoków, do których ma miejsce odwołanie w widoku.Program SQL Server wykonuje także stosowne sprawdzenia spójności blokad.

Wskazówki dotyczące blokad ROWLOCK, UPDLOCK, AND XLOCK uzyskujące blokady na poziomie wiersza, mogą blokować klucze indeksu, a nie rzeczywiste wiersze danych.Na przykład, jeśli tabela ma indeks nieklastrowany i instrukcja SELECT używająca wskazówki dotyczącej blokady jest obsługiwana przez indeks pokrywający, blokada jest uzyskiwana w odniesieniu do tego klucza indeksu w indeksie pokrywającym, a nie w odniesieniu do wiersza danych w tabeli bazowej.

Jeśli tabela zawiera kolumny obliczane i są one obliczane za pomocą wyrażeń lub funkcji uzyskujących dostęp do kolumn w innych tabelach, wskazówki dotyczące tabeli nie są używane w odniesieniu do tych tabel.To oznacza, że wskazówki dotyczące tabeli nie są propagowane.Na przykład wskazówka dotycząca tabeli NOLOCK jest określona w odniesieniu do tabeli w kwerendzie.Ta tabela zawiera kolumny obliczane za pomocą kombinacji wyrażeń i funkcji uzyskujących dostęp do kolumn w innej tabeli.Tabele, do których odwołują się wyrażenia i funkcje, nie używają wskazówki dotyczącej tabeli NOLOCK, gdy ma miejsce uzyskiwanie dostępu do nich.

Program SQL Server nie umożliwia stosowania więcej niż jednej wskazówki dotyczącej tabeli z poszczególnych następujących grup dla każdej tabeli w klauzuli FROM:

  • Wskazówki dotyczące ziarnistości: PAGLOCK, NOLOCK, ROWLOCK, TABLOCK lub TABLOCKX.

  • Aby zestaw kolejność wyzwalacz DLL z zakres serwera (utworzone ON ALL SERVER) lub wyzwalacza logowania wymaga uprawnienia CONTROL SERVER.Aby zestaw kolejność wyzwalacz DLL z zakres bazy danych (utworzone ON DATABASE) wymaga uprawnienia TRIGGER DDL bazy danych bez instrukcji ALTER.

Aby ustawić kolejność wyzwalacz DML wymaga uprawnienia ALTER na tabela lub widoku, na którym jest zdefiniowana wyzwalacza.

Indeks filtrowany może zostaćć użyty jako wskazówka dotycząca tabeli, ale spowoduje to wygenerowanie przez optymalizator kwerendy błędu 8622, jeśli nie obejmuje on wszystkich wierszy wybieranych przez kwerendę.Poniżej znajduje się przykład nieprawidłowej wskazówki indeksu filtrowanego.W przykładzie ma miejsce utworzenie indeksu filtrowanego FIBillOfMaterialsWithComponentID, a następnie użycie go jako wskazówki indeksu dla instrukcji SELECT.Predykat indeksu filtrowany obejmuje wiersze danych dla identyfikatorów ComponentID 533, 324 i 753.Predykat kwerendy obejmuje także wiersze danych dla identyfikatorów ComponentID 533, 324 i 753, ale rozszerza zestaw wyników w taki sposób, aby obejmował identyfikatory ComponentID 855 i 924, które nie są indeksami filtrowanymi.Dlatego optymalizator kwerendy nie może używać wskazówek indeksów filtrowanych i generuje błąd 8622.Aby uzyskać więcej informacji, zobacz Wskazówki dotyczące projektowania indeks filtrowane.

USE AdventureWorks;
GO
IF EXISTS (SELECT name FROM sys.indexes
    WHERE name = N'FIBillOfMaterialsWithComponentID' 
    AND object_id = OBJECT_ID(N'Production.BillOfMaterials'))
DROP INDEX FIBillOfMaterialsWithComponentID
    ON Production.BillOfMaterials;
GO
CREATE NONCLUSTERED INDEX "FIBillOfMaterialsWithComponentID"
    ON Production.BillOfMaterials (ComponentID, StartDate, EndDate)
    WHERE ComponentID IN (533, 324, 753);
GO
SELECT StartDate, ComponentID FROM Production.BillOfMaterials
    WITH( INDEX (FIBillOfMaterialsWithComponentID) )
    WHERE ComponentID in (533, 324, 753, 855, 924);
GO

Tylko jeden indeks pełnotekstowy tabela lub widok indeksowany, a każdy indeks pełnotekstowy odnosi się do pojedynczej tabela lub widok indeksowany.Aby uzyskać więcej informacji zobaczCREATE INDEX (języka Transact-SQL).

Indeks pełnotekstowy może zawierać maksymalnie 1024 kolumn.

Wskazówka NOEXPAND dotyczy jedynie indeksowanych widoków.Indeksowany widok to widok z utworzonym unikatowym indeksem klastrowanym.Jeśli kwerenda zawiera odwołania do kolumn obecnych zarówno w indeksowanych widokach i tabelach bazowych oraz optymalizator kwerendy określi, że użycie indeksowanego widoku będzie najlepszą metodą wykonania kwerendy, użyje on indeksu w widoku.Ta funkcja nosi nazwę dopasowania indeksowanego widoku i jest obsługiwana jedynie w programie SQL Server w wydaniach Enterprise i Developer.

Jednak, aby optymalizator uwzględnił indeksowane widoki do dopasowania lub użycie indeksowanego widoku, do którego ma odwołanie ze wskazówką NOEXPAND, następująca opcja SET musi mieć nadaną wartość ON:

ANSI_NULLS

ANSI_WARNINGS

CONCAT_NULL_YIELDS_NULL

ANSI_PADDING

ARITHABORT1

QUOTED_IDENTIFIERS

1 Opcja ARITHABORT ma niejawnie nadawaną wartość ON, gdy opcji ANSI_WARNINGS zostanie nadana wartość ON.Dlatego nie trzeba ręcznie dostosowywać tego ustawienia.

Oprócz tego opcja NUMERIC_ROUNDABORT musi mieć nadaną wartość OFF.

Aby wymusić użycie przez optymalizator indeksu dla indeksowanego widoku, należy określić opcję NOEXPAND.Ta wskazówka może zostać użyta jedynie wtedy, gdy widok zostanie także nazwany w kwerendzie.Program SQL Server nie oferuje wskazówki w celu wymuszenia użycia konkretnego indeksowanego widoku w kwerendzie, która nie nazywa bezpośrednio widoku w klauzuli FROM. Jednak optymalizator kwerendy bierze pod uwagę użycie indeksowanych widoków, nawet jeśli w kwerendzie nie ma do nich bezpośredniego odwołania.

Aby uzyskać więcej informacji zobaczIndeksy rozpoznawania na widoki.

Filtr ładuje dokumentu jako strumień binarny, usuwa informacje o formatowaniu i wysyła tekst z dokumentu do składnika, dzielenie wyrazów.

Wskazówki dotyczące tabeli można także określić jako wskazówki dotyczące kwerendy, używając klauzuli OPTION (TABLE HINT).Zaleca się, aby wskazówki dotyczącej tabeli używać jako wskazówki dotyczącej kwerendy tylko w kontekście przewodnika planu.W wypadku kwerend ad-hoc te wskazówki należy określać jedynie jako wskazówki dotyczące tabeli.Aby uzyskać więcej informacji, zobacz Query Hints (Transact-SQL).

Uprawnienia

Wskazówki KEEPIDENTITY, IGNORE_CONSTRAINTS i IGNORE_TRIGGERS wymagają uprawnienia ALTER do tabeli.

Przykłady

A.Używanie wskazówki TABLOCK do określania metody blokowania

Jeśli określona jako ciąg znaków, Production.Product odpowiada wartość alias kolumna w tabela systemowa syslanguages.

USE AdventureWorks;
GO
UPDATE Production.Product
WITH (TABLOCK)
SET ListPrice = ListPrice * 1.10
WHERE ProductNumber LIKE 'BK-%';
GO

B.Używanie wskazówki FORCESEEK do określania operacji przeszukiwania indeksu

Gdy określany jako wartość szesnastkowa Sales.SalesOrderDetail 0 x następuje szesnastkowe wartości LCID.