Hinweise (Transact-SQL) – AbfrageHints (Transact-SQL) - Query

Gilt für: JaSQL Server JaAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Abfragehinweise geben an, dass die angezeigten Hinweise in der gesamten Abfrage verwendet werden sollen.Query hints specify that the indicated hints should be used throughout the query. Sie wirken sich auf alle Operatoren in der Anweisung aus.They affect all operators in the statement. Falls UNION in der Hauptabfrage vorkommt, kann nur die letzte Abfrage, die eine UNION-Operation enthält, die OPTION-Klausel aufweisen.If UNION is involved in the main query, only the last query involving a UNION operation can have the OPTION clause. Abfragehinweise werden als Teil der OPTION-Klausel angegeben.Query hints are specified as part of the OPTION clause. Fehler 8622 tritt auf, wenn mindestens ein Abfragehinweis dazu führt, dass der Abfrageoptimierer keinen gültigen Plan generiert.Error 8622 occurs if one or more query hints cause the Query Optimizer not to generate a valid plan.

Achtung

Da der SQL ServerSQL Server-Abfrageoptimierer in der Regel den besten Ausführungsplan für eine Abfrage auswählt, wird empfohlen, dass nur erfahrene Entwickler und Datenbankadministratoren Hinweise verwenden, wenn alle anderen Möglichkeiten sich als unbefriedigend erwiesen haben.Because the SQL ServerSQL Server Query Optimizer typically selects the best execution plan for a query, we recommend only using hints as a last resort for experienced developers and database administrators.

Gilt für:Applies to:

DELETEDELETE

INSERTINSERT

SELECTSELECT

UPDATEUPDATE

MERGEMERGE

SyntaxSyntax

<query_hint > ::=   
{ { HASH | ORDER } GROUP   
  | { CONCAT | HASH | MERGE } UNION   
  | { LOOP | MERGE | HASH } JOIN   
  | EXPAND VIEWS   
  | FAST number_rows   
  | FORCE ORDER   
  | { FORCE | DISABLE } EXTERNALPUSHDOWN  
  | IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX  
  | KEEP PLAN   
  | KEEPFIXED PLAN  
  | MAX_GRANT_PERCENT = percent  
  | MIN_GRANT_PERCENT = percent  
  | MAXDOP number_of_processors   
  | MAXRECURSION number   
  | NO_PERFORMANCE_SPOOL   
  | OPTIMIZE FOR ( @variable_name { UNKNOWN | = literal_constant } [ , ...n ] )  
  | OPTIMIZE FOR UNKNOWN  
  | PARAMETERIZATION { SIMPLE | FORCED }   
  | RECOMPILE  
  | ROBUST PLAN   
  | USE HINT ( '<hint_name>' [ , ...n ] )
  | USE PLAN N'xml_plan'  
  | TABLE HINT ( exposed_object_name [ , <table_hint> [ [, ]...n ] ] )  
}  
  
<table_hint> ::=  
[ NOEXPAND ] {   
    INDEX ( index_value [ ,...n ] ) | INDEX = ( index_value )  
  | FORCESEEK [( index_value ( index_column_name [,... ] ) ) ]  
  | FORCESCAN  
  | HOLDLOCK   
  | NOLOCK   
  | NOWAIT  
  | PAGLOCK   
  | READCOMMITTED   
  | READCOMMITTEDLOCK   
  | READPAST   
  | READUNCOMMITTED   
  | REPEATABLEREAD   
  | ROWLOCK   
  | SERIALIZABLE   
  | SNAPSHOT  
  | SPATIAL_WINDOW_MAX_CELLS = integer  
  | TABLOCK   
  | TABLOCKX   
  | UPDLOCK   
  | XLOCK  
}  

ArgumenteArguments

{ HASH | ORDER } GROUP{ HASH | ORDER } GROUP
Gibt an, dass die in der GROUP BY- oder DISTINCT-Klausel der Abfrage beschriebenen Aggregationen Hash- oder Sortiervorgänge verwenden sollen.Specifies that aggregations that the query's GROUP BY or DISTINCT clause describes should use hashing or ordering.

{ MERGE | HASH | CONCAT } UNION{ MERGE | HASH | CONCAT } UNION
Gibt an, dass alle UNION-Vorgänge mithilfe von Merge-, Hash- oder Verkettungsvorgängen für die bei UNION vorkommenden Mengen ausgeführt werden.Specifies that all UNION operations are run by merging, hashing, or concatenating UNION sets. Wenn mehr als ein UNION-Hinweis angegeben wird, wählt der Abfrageoptimierer unter den angegebenen Hinweisen die Strategie mit dem geringsten Aufwand aus.If more than one UNION hint is specified, the Query Optimizer selects the least expensive strategy from those hints specified.

{ LOOP | MERGE | HASH } JOIN{ LOOP | MERGE | HASH } JOIN
Gibt an, dass alle Joinvorgänge per LOOP JOIN, MERGE JOIN oder HASH JOIN in der gesamten Abfrage ausgeführt werden.Specifies all join operations are performed by LOOP JOIN, MERGE JOIN, or HASH JOIN in the whole query. Wenn Sie mehr als einen Joinhinweis angeben, wählt der Optimierer unter den zulässigen Hinweisen die Strategie mit dem geringsten Aufwand aus.If you specify more than one join hint, the optimizer selects the least expensive join strategy from the allowed ones.

Wenn Sie in der FROM-Klausel derselben Abfrage für ein bestimmtes Tabellenpaar einen Joinhinweis angeben, hat dieser Joinhinweis Vorrang bei der Verknüpfung der beiden Tabellen.If you specify a join hint in the same query's FROM clause for a specific table pair, this join hint takes precedence in the joining of the two tables. Die Abfragehinweise müssen jedoch auch berücksichtigt werden.The query hints, though, must still be honored. Der Joinhinweis kann für das Tabellenpaar nur die Auswahl der zulässigen Joinmethoden für den Abfragehinweis einschränken.The join hint for the pair of tables may only restrict the selection of allowed join methods in the query hint. Weitere Informationen finden Sie unter Joinhinweise (Transact-SQL).For more information, see Join Hints (Transact-SQL).

EXPAND VIEWSEXPAND VIEWS
Gibt an, dass die indizierten Sichten erweitert werden.Specifies the indexed views are expanded. Gibt auch an, dass der Abfrageoptimierer keine indizierte Sicht als Ersatz für einen Abfrageteil berücksichtigt.Also specifies the Query Optimizer won't consider any indexed view as a replacement for any query part. Eine Sicht wird erweitert, wenn die Sichtdefinition im Abfragetext den Sichtnamen ersetzt.A view is expanded when the view definition replaces the view name in the query text.

Dieser Abfragehinweis lässt die direkte Verwendung von indizierten Sichten und Indizes für indizierte Sichten im Abfrageplan praktisch nicht zu.This query hint virtually disallows direct use of indexed views and indexes on indexed views in the query plan.

Die indizierte Sicht wird nicht erweitert, wenn ein direkter Verweis auf die Ansicht im SELECT-Teil der Abfrage vorhanden ist.The indexed view remains condensed if there's a direct reference to the view in the query's SELECT part. Die Ansicht wird ebenfalls nicht erweitert, wenn Sie WITH (NOEXPAND) oder WITH (NOEXPAND, INDEX(index_value_ [ , ...n ] ) ) angeben.The view also remains condensed if you specify WITH (NOEXPAND) or WITH (NOEXPAND, INDEX(index_value_ [ ,...n ] ) ). Weitere Informationen zum Abfragehinweis NOEXPAND finden Sie unter Using NOEXPAND (Verwenden von NOEXPAND).For more information about the query hint NOEXPAND, see Using NOEXPAND.

Der Hinweis wirkt sich nur auf die Ansichten im SELECT-Teil von Anweisungen aus, einschließlich der Ansichten in den Anweisungen INSERT, UPDATE, MERGE und DELETE.The hint only affects the views in the statements' SELECT part, including those views in INSERT, UPDATE, MERGE, and DELETE statements.

FAST number_rowsFAST number_rows
Gibt an, dass die Abfrage für den schnellen Abruf der ersten number_rows optimiert wird.Specifies that the query is optimized for fast retrieval of the first number_rows. Dieses Ergebnis ist eine nicht negative ganze Zahl.This result is a nonnegative integer. Nachdem die ersten number_rows zurückgegeben wurden, wird die Abfrage fortgesetzt und das vollständige Resultset erstellt.After the first number_rows are returned, the query continues execution and produces its full result set.

FORCE ORDERFORCE ORDER
Gibt an, dass die von der Abfragesyntax angegebene Joinreihenfolge während der Abfrageoptimierung beibehalten wird.Specifies that the join order indicated by the query syntax is preserved during query optimization. Die Verwendung von FORCE ORDER hat keine Auswirkung auf das mögliche Rollentauschverhalten des Abfrageoptimierers.Using FORCE ORDER doesn't affect possible role reversal behavior of the Query Optimizer.

Hinweis

In einer MERGE-Anweisung wird als Standardreihenfolge für Joins zunächst auf die Quelltabelle und dann auf die Zieltabelle zugegriffen, es sei denn, die WHEN SOURCE NOT MATCHED-Klausel wurde angegeben.In a MERGE statement, the source table is accessed before the target table as the default join order, unless the WHEN SOURCE NOT MATCHED clause is specified. Wenn Sie FORCE ORDER angeben, wird dieses Standardverhalten beibehalten.Specifying FORCE ORDER preserves this default behavior.

{ FORCE | DISABLE } EXTERNALPUSHDOWN{ FORCE | DISABLE } EXTERNALPUSHDOWN
Erzwingen oder Deaktivieren der Weitergabe der Berechnung von qualifizierenden Ausdrücken in Hadoop.Force or disable the pushdown of the computation of qualifying expressions in Hadoop. Gilt nur für Abfragen mit PolyBase.Only applies to queries using PolyBase. Wird nicht in den Azure-Speicher weitergegeben.Won't push down to Azure storage.

KEEP PLANKEEP PLAN
Zwingt den Abfrageoptimierer, den geschätzten Neukompilierungsschwellenwert für eine Abfrage zu lockern.Forces the Query Optimizer to relax the estimated recompile threshold for a query. Der geschätzte Recompile-Neukompilierungsschwellenwert startet ein automatisches Neukompilieren für die Abfrage, wenn die geschätzte Anzahl von indizierten Spaltenänderungen in einer Tabelle durch Ausführen einer der folgenden Anweisungen vorgenommen wurde:The estimated recompile threshold starts an automatic recompile for the query when the estimated number of indexed column changes have been made to a table by running one of the following statements:

  • UPDATEUPDATE
  • DeleteDELETE
  • MERGEMERGE
  • INSERTINSERT

Durch Angeben von KEEP PLAN wird sichergestellt, dass eine Abfrage nicht zu häufig erneut kompiliert wird, wenn an einer Tabelle mehrere Updates ausgeführt werden.Specifying KEEP PLAN makes sure a query won't be recompiled as frequently when there are multiple updates to a table.

KEEPFIXED PLANKEEPFIXED PLAN
Zwingt den Abfrageoptimierer, die Abfrage aufgrund von Änderungen in den Statistiken nicht erneut zu kompilieren.Forces the Query Optimizer not to recompile a query because of changes in statistics. Durch Angabe von KEEPFIXED PLAN wird sichergestellt, dass eine Abfrage nur dann erneut kompiliert wird, wenn das Schema der zugrunde liegenden Tabellen geändert wird oder für diese Tabellen sp_recompile ausgeführt wird.Specifying KEEPFIXED PLAN makes sure that a query recompiles only if the schema of the underlying tables changes or if sp_recompile runs against those tables.

IGNORE_NONCLUSTERED_COLUMNSTORE_INDEXIGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
Gilt für: SQL ServerSQL Server (ab SQL Server 2012 (11.x)SQL Server 2012 (11.x) und höher).Applies to: SQL ServerSQL Server (staring with SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later.

Verhindert, dass die Abfrage einen nicht gruppierten speicheroptimierten Columnstore-Index verwendet.Prevents the query from using a nonclustered memory optimized columnstore index. Wenn die Abfrage den Abfragehinweis enthält, der die Verwendung des Columnstore-Indexes verhindert, sowie einen Indexhinweis, der die Verwendung eines Columnstore-Index festlegt, besteht ein Konflikt zwischen den Hinweisen, und die Abfrage gibt einen Fehler zurück.If the query contains the query hint to avoid the use of the columnstore index, and an index hint to use a columnstore index, the hints are in conflict and the query returns an error.

MAX_GRANT_PERCENT = percent MAX_GRANT_PERCENT = percent
Gilt für: SQL ServerSQL Server (ab SQL Server 2016 (13.x)SQL Server 2016 (13.x)) und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL ServerSQL Server (starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x)) and Azure SQL-DatenbankAzure SQL Database.

Die maximale Größe der Arbeitsspeicherzuweisung in Prozent.The maximum memory grant size in PERCENT. Die Abfrage überschreitet diese Begrenzung garantiert nicht.The query is guaranteed not to exceed this limit. Die tatsächliche Begrenzung kann niedriger sein, wenn die Resource Governor-Einstellung niedriger ist als die durch diesen Hinweis angegebene Begrenzung.The actual limit can be lower if the Resource Governor setting is lower than the value specified by this hint. Gültige Werte liegen in einem Bereich zwischen 0,0 und 100,0.Valid values are between 0.0 and 100.0.

MIN_GRANT_PERCENT = percent MIN_GRANT_PERCENT = percent
Gilt für: SQL ServerSQL Server (ab SQL Server 2016 (13.x)SQL Server 2016 (13.x)) und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL ServerSQL Server (starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x)) and Azure SQL-DatenbankAzure SQL Database.

Die minimale Größe der Arbeitsspeicherzuweisung in PERCENT = % der Standardbegrenzung.The minimum memory grant size in PERCENT = % of default limit. Die Abfrage kann MAX (benötigter Speicher, Mindestzuweisung) garantiert abrufen, da zumindest der für das Starten einer Abfrage benötigte Speicher erforderlich ist.The query is guaranteed to get MAX(required memory, min grant) because at least required memory is needed to start a query. Gültige Werte liegen in einem Bereich zwischen 0,0 und 100,0.Valid values are between 0.0 and 100.0.

MAXDOP number MAXDOP number
Gilt für: SQL ServerSQL Server (ab SQL Server 2008SQL Server 2008) und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL ServerSQL Server (starting with SQL Server 2008SQL Server 2008) and Azure SQL-DatenbankAzure SQL Database.

Überschreibt die Konfigurationsoption max degree of parallelism von sp_configure.Overrides the max degree of parallelism configuration option of sp_configure. Überschreibt auch den Resource Governor für die Abfrage, die diese Option angibt.Also overrides the Resource Governor for the query specifying this option. Der MAXDOP-Abfragehinweis kann den mit sp_configure konfigurierten Wert überschreiten.The MAXDOP query hint can exceed the value configured with sp_configure. Wenn MAXDOP den mit der Ressourcenkontrolle konfigurierten Wert überschreitet, verwendet Datenbank-EngineDatabase Engine den MAXDOP-Wert der Ressourcenkontrolle, wie unter ALTER WORKLOAD GROUP (Transact-SQL) beschrieben.If MAXDOP exceeds the value configured with Resource Governor, the Datenbank-EngineDatabase Engine uses the Resource Governor MAXDOP value, described in ALTER WORKLOAD GROUP (Transact-SQL). Alle mit der Konfigurationsoption Max. Grad an Parallelität verwendeten semantischen Regeln gelten auch für die Verwendung des MAXDOP-Abfragehinweises.All semantic rules used with the max degree of parallelism configuration option are applicable when you use the MAXDOP query hint. Weitere Informationen finden Sie unter Konfigurieren der Serverkonfigurationsoption Max. Grad an Parallelität.For more information, see Configure the max degree of parallelism Server Configuration Option.

Warnung

Wenn MAXDOP auf 0 (null) festgelegt wird, wählt der Server den maximalen Grad an Parallelität aus.If MAXDOP is set to zero, then the server chooses the max degree of parallelism.

MAXRECURSION number MAXRECURSION number
Gibt die maximale Anzahl der für diese Abfrage zulässigen Rekursionen an.Specifies the maximum number of recursions allowed for this query. number ist eine nicht negative ganze Zahl zwischen 0 und 32.767.number is a nonnegative integer between 0 and 32,767. Wenn 0 angegeben wird, wird keine Beschränkung angewendet.When 0 is specified, no limit is applied. Wenn diese Option nicht angegeben wird, beträgt das Standardlimit für den Server 100.If this option isn't specified, the default limit for the server is 100.

Wenn der angegebene Wert bzw. der Standardwert für MAXRECURSION während der Ausführung der Abfrage erreicht wird, wird die Abfrage beendet und ein Fehler wird zurückgegeben.When the specified or default number for MAXRECURSION limit is reached during query execution, the query ends and an error returns.

Aufgrund dieses Fehlers wird für alle Änderungen aufgrund der Anweisung ein Rollback ausgeführt.Because of this error, all effects of the statement are rolled back. Falls es sich hierbei um eine SELECT-Anweisung handelt, können Teilergebnisse oder keine Ergebnisse zurückgegeben werden.If the statement is a SELECT statement, partial results or no results may be returned. Teilergebnisse schließen möglicherweise nicht alle Zeilen auf Rekursionsebenen ein, die über die angegebene maximale Rekursionsebene hinausgehen.Any partial results returned may not include all rows on recursion levels beyond the specified maximum recursion level.

Weitere Informationen finden Sie unter WITH common_table_expression (Transact-SQL).For more information, see WITH common_table_expression (Transact-SQL).

NO_PERFORMANCE_SPOOLNO_PERFORMANCE_SPOOL
Gilt für: SQL ServerSQL Server (ab SQL Server 2016 (13.x)SQL Server 2016 (13.x)) und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL ServerSQL Server (starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x)) and Azure SQL-DatenbankAzure SQL Database.

Verhindert, dass ein Spool-Operator zu Abfrageplänen hinzugefügt wird (mit Ausnahme der Pläne, bei denen der Spool-Operator eine gültige Update-Semantik garantieren muss).Prevents a spool operator from being added to query plans (except for the plans when spool is required to guarantee valid update semantics). In einigen Szenarios kann der Spool-Operator die Leistung beeinträchtigen.The spool operator may reduce performance in some scenarios. Der Spool-Operator verwendet beispielsweise „tempdb“. Wenn in den Spool-Vorgängen viele Abfragen gleichzeitig ausgeführt werden, kann es zu einem tempdb-Konflikt kommen.For example, the spool uses tempdb, and tempdb contention can occur if there are many concurrent queries running with the spool operations.

OPTIMIZE FOR ( @variable_name { UNKNOWN | = literal_constant } [ , ...n ] )OPTIMIZE FOR ( @variable_name { UNKNOWN | = literal_constant } [ , ...n ] )
Weist den Abfrageoptimierer an, einen bestimmten Wert für eine lokale Variable zu verwenden, wenn die Abfrage kompiliert und optimiert wird.Instructs the Query Optimizer to use a particular value for a local variable when the query is compiled and optimized. Dieser Wert wird nur während der Abfrageoptimierung verwendet, nicht während der Abfrageausführung.The value is used only during query optimization, and not during query execution.

@variable_name@variable_name
Der Name einer lokalen Variablen, die in einer Abfrage verwendet wird und der ein Wert für die Verwendung mit dem OPTIMIZE FOR-Abfragehinweis zugewiesen werden kann.Is the name of a local variable used in a query, to which a value may be assigned for use with the OPTIMIZE FOR query hint.

UNKNOWNUNKNOWN
Gibt an, dass der Abfrageoptimierer statt des Anfangswerts statistische Daten verwenden soll, um während der Abfrageoptimierung den Wert einer lokalen Variablen zu bestimmen.Specifies that the Query Optimizer uses statistical data instead of the initial value to determine the value for a local variable during query optimization.

literal_constantliteral_constant
Ein Literalkonstantenwert, dem @variable_name für die Verwendung mit dem Abfragehinweis „OPTIMIZE FOR“ zugewiesen wird.Is a literal constant value to be assigned @variable_name for use with the OPTIMIZE FOR query hint. literal_constant wird nur während der Abfrageoptimierung verwendet, nicht als Wert von @variable_name während der Abfrageausführung.literal_constant is used only during query optimization, and not as the value of @variable_name during query execution. literal_constant kann einen beliebigen SQL ServerSQL Server-Systemdatentyp aufweisen, der als Literalkonstante dargestellt werden kann.literal_constant can be of any SQL ServerSQL Server system data type that can be expressed as a literal constant. Der Datentyp von literal_constant muss implizit in den Datentyp konvertierbar sein, auf den @variable_name in der Abfrage verweist.The data type of literal_constant must be implicitly convertible to the data type that @variable_name references in the query.

OPTIMIZE FOR kann dem Erkennungsverhalten der Standardparameter des Optimierers entgegenwirken.OPTIMIZE FOR can counteract the optimizer's default parameter detection behavior. Verwenden Sie OPTIMIZE FOR auch, wenn Sie Planhinweislisten erstellen.Also use OPTIMIZE FOR when you create plan guides. Weitere Informationen finden Sie unter Erneutes Kompilieren einer gespeicherten Prozedur.For more information, see Recompile a Stored Procedure.

OPTIMIZE FOR UNKNOWNOPTIMIZE FOR UNKNOWN
Weist den Abfrageoptimierer an, beim Kompilieren und Optimieren der Abfrage für alle lokalen Variablen, statistische Daten statt der Anfangswerte zu verwenden.Instructs the Query Optimizer to use statistical data instead of the initial values for all local variables when the query is compiled and optimized. Diese Optimierung umfasst auch Parameter, die mit erzwungener Parametrisierung erstellt werden.This optimization includes parameters created with forced parameterization.

Wenn OPTIMIZE FOR @variable_name = literal_constant und OPTIMIZE FOR UNKNOWN in dem gleichen Abfragehinweis verwendet werden, verwendet der Abfrageoptimierer die literal_constant, die für einen bestimmten Wert angegeben wurde.If you use OPTIMIZE FOR @variable_name = literal_constant and OPTIMIZE FOR UNKNOWN in the same query hint, the Query Optimizer will use the literal_constant specified for a specific value. Der Abfrageoptimierer verwendet UNKNOWN für die übrigen Variablenwerte.The Query Optimizer will use UNKNOWN for the rest of the variable values. Diese Werte werden nur während der Abfrageoptimierung verwendet, nicht während der Abfrageausführung.The values are used only during query optimization, and not during query execution.

PARAMETERIZATION { SIMPLE | FORCED }PARAMETERIZATION { SIMPLE | FORCED }
Gibt die Parametrisierungsregeln an, die der SQL ServerSQL Server-Abfrageoptimierer bei der Kompilierung auf die Abfrage anwendet.Specifies the parameterization rules that the SQL ServerSQL Server Query Optimizer applies to the query when it's compiled.

Wichtig

Der PARAMETERIZATION-Abfragehinweis kann in einer Planhinweisliste nur angegeben werden, um die aktuelle Einstellung der Option PARAMETERIZATION database SET zu überschreiben.The PARAMETERIZATION query hint can only be specified inside a plan guide to override the current setting of the PARAMETERIZATION database SET option. Er kann nicht direkt innerhalb einer Abfrage angegeben werden.It can't be specified directly within a query.
Weitere Informationen finden Sie unter Angeben des Abfrageparametrisierungsverhaltens mithilfe von Planhinweislisten.For more information, see Specify Query Parameterization Behavior by Using Plan Guides.

Mit SIMPLE wird der Abfrageoptimierer angewiesen, einfache Parametrisierung auszuführen.SIMPLE instructs the Query Optimizer to attempt simple parameterization. Mit FORCED wird der Abfrageoptimierer angewiesen, eine erzwungene Parametrisierung auszuführen.FORCED instructs the Query Optimizer to attempt forced parameterization. Weitere Informationen finden Sie unter „Erzwungene Parametrisierung“ im Handbuch zur Architektur der Abfrageverarbeitung und unter „Einfache Parametrisierung“ im Handbuch zur Architektur der Abfrageverarbeitung.For more information, see Forced Parameterization in the Query Processing Architecture Guide, and Simple Parameterization in the Query Processing Architecture Guide.

RECOMPILERECOMPILE
Weist SQL Server-Datenbank-EngineSQL Server Database Engine an, einen neuen, temporären Plan für die Abfrage zu erstellen und diesen Plan sofort nach Ausführung der Abfrage zu verwerfen.Instructs the SQL Server-Datenbank-EngineSQL Server Database Engine to generate a new, temporary plan for the query and immediately discard that plan after the query completes execution. Der generierte Abfrageplan ersetzt keinen im Cache gespeicherten Plan, wenn dieselbe Abfrage ohne den Hinweis RECOMPILE ausgeführt wird.The generated query plan doesn't replace a plan stored in cache when the same query runs without the RECOMPILE hint. Ohne die Angabe von RECOMPILE werden Abfragepläne von Datenbank-EngineDatabase Engine zwischengespeichert und wiederverwendet.Without specifying RECOMPILE, the Datenbank-EngineDatabase Engine caches query plans and reuses them. Beim Kompilieren von Abfrageplänen verwendet der RECOMPILE-Abfragehinweis die aktuellen Werte aller lokalen Variablen in der Abfrage.When compiling query plans, the RECOMPILE query hint uses the current values of any local variables in the query. Wenn sich die Abfrage innerhalb einer gespeicherten Prozedur befindet, werden die aktuellen Werte an beliebige Parameter übergeben.If the query is inside a stored procedure, the current values passed to any parameters.

RECOMPILE ist eine nützliche Alternative zum Erstellen einer gespeicherten Prozedur.RECOMPILE is a useful alternative to creating a stored procedure. RECOMPILE verwendet die WITH RECOMPILE-Klausel, wenn nicht die gesamte gespeicherte Prozedur, sondern nur eine Teilmenge davon erneut kompiliert werden muss.RECOMPILE uses the WITH RECOMPILE clause when only a subset of queries inside the stored procedure, instead of the whole stored procedure, must be recompiled. Weitere Informationen finden Sie unter Erneutes Kompilieren einer gespeicherten Prozedur.For more information, see Recompile a Stored Procedure. RECOMPILE ist auch beim Erstellen von Planhinweislisten hilfreich.RECOMPILE is also useful when you create plan guides.

ROBUST PLANROBUST PLAN
Zwingt den Abfrageoptimierer zu einer Vorgehensweise, bei der der Schwerpunkt auf der maximalen potenziellen Zeilengröße liegt. Dies geht möglicherweise zu Lasten der Leistung.Forces the Query Optimizer to try a plan that works for the maximum potential row size, possibly at the expense of performance. Bei der Verarbeitung der Abfrage müssen möglicherweise Zwischentabellen und Operatoren Zeilen speichern und verarbeiten, die größer sind als alle Eingabezeilen, wenn die Abfrage verarbeitet wird.When the query is processed, intermediate tables and operators may have to store and process rows that are wider than any one of the input rows when the query is processed. Die Zeilen können so groß sein, dass der jeweilige Operator in einigen Fällen die Zeile nicht verarbeiten kann.The rows may be so wide that, sometimes, the particular operator can't process the row. Wenn Zeilen so groß sind, gibt Datenbank-EngineDatabase Engine während der Ausführung der Abfrage einen Fehler aus.If rows are that wide, the Datenbank-EngineDatabase Engine produces an error during query execution. Durch das Verwenden von ROBUST PLAN weisen Sie den Abfrageoptimierer an, keine Abfragepläne in Betracht zu ziehen, für die möglicherweise dieses Problem auftritt.By using ROBUST PLAN, you instruct the Query Optimizer not to consider any query plans that may run into this problem.

Ist eine solche Vorgehensweise nicht möglich, gibt der Abfrageoptimierer einen Fehler zurück, statt die Fehlererkennung auf die Abfrageausführung zu verschieben.If such a plan isn't possible, the Query Optimizer returns an error instead of deferring error detection to query execution. Die Zeilen können Spalten variabler Länge aufweisen. Datenbank-EngineDatabase Engine läßt die Definition von Zeilen zu, deren maximale potenzielle Größe von Datenbank-EngineDatabase Engine nicht mehr verarbeitet werden kann.Rows may contain variable-length columns; the Datenbank-EngineDatabase Engine allows for rows to be defined that have a maximum potential size beyond the ability of the Datenbank-EngineDatabase Engine to process them. Trotz der maximalen potenziellen Größe speichert eine Anwendung im Allgemeinen Zeilen, deren tatsächliche Größe innerhalb der Höchstwerte liegen, die Datenbank-EngineDatabase Engine verarbeiten kann.Generally, despite the maximum potential size, an application stores rows that have actual sizes within the limits that the Datenbank-EngineDatabase Engine can process. Wenn Datenbank-EngineDatabase Engine eine Zeile ermittelt, die zu lang ist, wird ein Ausführungsfehler zurückgegeben.If the Datenbank-EngineDatabase Engine comes across a row that is too long, an execution error is returned.

USE HINT ( ' hint_name ' )USE HINT ( 'hint_name' )
Gilt für: SQL ServerSQL Server (ab SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1) und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL ServerSQL Server (starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1) and Azure SQL-DatenbankAzure SQL Database.

Stellt eine oder mehrere zusätzliche Hinweise für den Abfrageprozessor bereit.Provides one or more additional hints to the query processor. Die zusätzlichen Hinweise werden von einem Hinweisnamen innerhalb einfacher Anführungszeichen angegeben.The additional hints are specified by a hint name inside single quotation marks.

Die folgenden Hinweisnamen werden unterstützt:The following hint names are supported:

  • 'ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS' 'ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS'
    Bewirkt, dass SQL ServerSQL Server unter dem Kardinalitätsschätzungsmodell für den Abfrageoptimierer von SQL Server 2014 (12.x)SQL Server 2014 (12.x) oder einer neueren Version einen Abfrageplan mithilfe der Simple-Containment-Annahme statt mit der Base-Containment-Annahme generiert.Causes SQL ServerSQL Server to generate a query plan using the Simple Containment assumption instead of the default Base Containment assumption for joins, under the Query Optimizer Cardinality Estimation model of SQL Server 2014 (12.x)SQL Server 2014 (12.x) or newer. Dieser Hinweisname entspricht Ablaufverfolgungsflag 9476.This hint name is equivalent to trace flag 9476.

  • 'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES' 'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES'
    Bewirkt, dass SQL ServerSQL Server einen Plan mit minimaler Selektivität generiert, wenn AND-Prädikate für Filter geschätzt werden, die bei der Korrelation berücksichtigt werden sollen.Causes SQL ServerSQL Server to generate a plan using minimum selectivity when estimating AND predicates for filters to account for correlation. Dieser Hinweisname entspricht Ablaufverfolgungsflag 4137, wenn es mit dem Kardinalitätsschätzungsmodell von SQL Server 2012 (11.x)SQL Server 2012 (11.x) und früheren Versionen verwendet wird, und hat ähnliche Auswirkungen, wenn das Ablaufverfolgungsflag 9471 mit dem Kardinalitätsschätzungsmodell von SQL Server 2014 (12.x)SQL Server 2014 (12.x) oder einer neueren Version verwendet wird.This hint name is equivalent to trace flag 4137 when used with cardinality estimation model of SQL Server 2012 (11.x)SQL Server 2012 (11.x) and earlier versions, and has similar effect when trace flag 9471 is used with cardinality estimation model of SQL Server 2014 (12.x)SQL Server 2014 (12.x) or higher.

  • 'DISABLE_BATCH_MODE_ADAPTIVE_JOINS''DISABLE_BATCH_MODE_ADAPTIVE_JOINS'
    Deaktiviert Adaptive Joins im Batchmodus.Disables batch mode adaptive joins. Weitere Informationen finden Sie unter Adaptive Joins im Batchmodus.For more information, see Batch mode Adaptive Joins.
    Gilt für: SQL ServerSQL Server (ab SQL Server 2017 (14.x)SQL Server 2017 (14.x)) und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL ServerSQL Server (starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x)) and Azure SQL-DatenbankAzure SQL Database.

  • 'DISABLE_BATCH_MODE_MEMORY_GRANT_FEEDBACK''DISABLE_BATCH_MODE_MEMORY_GRANT_FEEDBACK'
    Deaktiviert das Feedback zur Speicherzuweisung im Batchmodus.Disables batch mode memory grant feedback. Weitere Informationen finden Sie unter Feedback zur Speicherzuweisung im Batchmodus.For more information, see Batch mode memory grant feedback.
    Gilt für: SQL ServerSQL Server (ab SQL Server 2017 (14.x)SQL Server 2017 (14.x)) und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL ServerSQL Server (starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x)) and Azure SQL-DatenbankAzure SQL Database.

  • 'DISABLE_DEFERRED_COMPILATION_TV''DISABLE_DEFERRED_COMPILATION_TV'
    Deaktiviert die verzögerte Kompilierung von Tabellenvariablen.Disables table variable deferred compilation. Weitere Informationen finden Sie unter Verzögerte Kompilierung von Tabellenvariablen.For more information, see Table variable deferred compilation.
    Gilt für: SQL ServerSQL Server (ab SQL Server 2019 (15.x)SQL Server 2019 (15.x)) und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL ServerSQL Server (starting with SQL Server 2019 (15.x)SQL Server 2019 (15.x)) and Azure SQL-DatenbankAzure SQL Database.

  • 'DISABLE_INTERLEAVED_EXECUTION_TVF''DISABLE_INTERLEAVED_EXECUTION_TVF'
    Deaktiviert die verschachtelte Ausführung mit Tabellenwertfunktionen mit mehreren Anweisungen.Disables interleaved execution for multi-statement table-valued functions. Weitere Informationen finden Sie unter Verschachtelte Ausführung mit Tabellenwertfunktionen mit mehreren Anweisungen.For more information, see Interleaved execution for multi-statement table-valued functions.
    Gilt für: SQL ServerSQL Server (ab SQL Server 2017 (14.x)SQL Server 2017 (14.x)) und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL ServerSQL Server (starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x)) and Azure SQL-DatenbankAzure SQL Database.

  • 'DISABLE_OPTIMIZED_NESTED_LOOP''DISABLE_OPTIMIZED_NESTED_LOOP'
    Weist den Abfrageprozessor an, bei der Generierung eines Abfrageplans keine Sortiervorgänge (Batch-Sortierung) für optimierte Joins geschachtelter Schleifen zu verwenden.Instructs the query processor not to use a sort operation (batch sort) for optimized nested loop joins when generating a query plan. Dieser Hinweisname entspricht Ablaufverfolgungsflag 2340.This hint name is equivalent to trace flag 2340.

  • 'DISABLE_OPTIMIZER_ROWGOAL' 'DISABLE_OPTIMIZER_ROWGOAL'
    Veranlasst SQL Server, einen Plan zu erstellen, der keine Zeilenzieländerungen mit Abfragen verwendet, die diese Schlüsselwörter enthalten:Causes SQL Server to generate a plan that doesn't use row goal modifications with queries that contain these keywords:

    • TOPTOP
    • OPTION (FAST N)OPTION (FAST N)
    • ININ
    • EXISTSEXISTS

    Dieser Hinweisname entspricht Ablaufverfolgungsflag 4138.This hint name is equivalent to trace flag 4138.

  • 'DISABLE_PARAMETER_SNIFFING''DISABLE_PARAMETER_SNIFFING'
    Weist den Abfrageoptimierer an, die durchschnittliche Datenverteilung zu verwenden, während er eine Abfrage mit einem oder mehreren Parametern kompiliert.Instructs Query Optimizer to use average data distribution while compiling a query with one or more parameters. Diese Anweisung macht den Abfrageplan unabhängig von dem Parameterwert, der beim Kompilieren der Abfrage zuerst verwendet wurde.This instruction makes the query plan independent on the parameter value that was first used when the query was compiled. Dieser Hinweisname entspricht Ablaufverfolgungsflag 4136 oder der Einstellung PARAMETER_SNIFFING = OFF für die Datenbankweit gültige Konfiguration.This hint name is equivalent to trace flag 4136 or Database Scoped Configuration setting PARAMETER_SNIFFING = OFF.

  • 'DISABLE_ROW_MODE_MEMORY_GRANT_FEEDBACK''DISABLE_ROW_MODE_MEMORY_GRANT_FEEDBACK'
    Deaktiviert das Feedback zur Speicherzuweisung im Zeilenmodus.Disables row mode memory grant feedback. Weitere Informationen finden Sie unter Feedback zur Speicherzuweisung im Zeilenmodus.For more information, see Row mode memory grant feedback.
    Gilt für: SQL ServerSQL Server (ab SQL Server 2019 (15.x)SQL Server 2019 (15.x)) und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL ServerSQL Server (starting with SQL Server 2019 (15.x)SQL Server 2019 (15.x)) and Azure SQL-DatenbankAzure SQL Database.

  • 'DISABLE_TSQL_SCALAR_UDF_INLINING''DISABLE_TSQL_SCALAR_UDF_INLINING'
    Deaktiviert das Inlining benutzerdefinierter Skalarfunktionen.Disables scalar UDF inlining. Weitere Informationen finden Sie unter Scalar UDF Inlining (Inlining benutzerdefinierter Skalarfunktionen).For more information, see Scalar UDF Inlining.
    Gilt für: SQL ServerSQL Server (ab SQL Server 2019 (15.x)SQL Server 2019 (15.x)).Applies to: SQL ServerSQL Server (starting with SQL Server 2019 (15.x)SQL Server 2019 (15.x)).

  • 'DISALLOW_BATCH_MODE''DISALLOW_BATCH_MODE'
    Deaktiviert die Batchmodusausführung.Disables batch mode execution. Weitere Informationen finden Sie unter Ausführungsmodi.For more information, see Execution modes.
    Gilt für: SQL ServerSQL Server (ab SQL Server 2017 (14.x)SQL Server 2017 (14.x)) und Azure SQL-DatenbankAzure SQL Database.Applies to: SQL ServerSQL Server (starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x)) and Azure SQL-DatenbankAzure SQL Database.

  • 'ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS''ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS'
    Aktiviert automatisch generierte Schnellstatistiken (Histogrammzusatz) für alle führenden Indexspalten, für welche die Kardinalitätsschätzung erforderlich ist.Enables automatically generated quick statistics (histogram amendment) for any leading index column for which cardinality estimation is needed. Das für die Kardinalitätsschätzung verwendete Histogramm wird zum Zeitpunkt der Abfragekompilierung angepasst, damit der tatsächliche Höchst- und Mindestwert in dieser Spalte berücksichtigt werden.The histogram used to estimate cardinality will be adjusted at query compile time to account for actual maximum or minimum value of this column. Dieser Hinweisname entspricht Ablaufverfolgungsflag 4139.This hint name is equivalent to trace flag 4139.

  • 'ENABLE_QUERY_OPTIMIZER_HOTFIXES''ENABLE_QUERY_OPTIMIZER_HOTFIXES'
    Aktiviert Hotfixes für den Abfrageoptimierer (Änderungen wurden in kumulativen Updates und Service Packs von SQL Server veröffentlicht).Enables Query Optimizer hotfixes (changes released in SQL Server Cumulative Updates and Service Packs). Dieser Hinweisname entspricht Ablaufverfolgungsflag 4199 oder der Einstellung QUERY_OPTIMIZER_HOTFIXES = ON für die Datenbankweit gültige Konfiguration.This hint name is equivalent to trace flag 4199 or Database Scoped Configuration setting QUERY_OPTIMIZER_HOTFIXES = ON.

  • 'FORCE_DEFAULT_CARDINALITY_ESTIMATION''FORCE_DEFAULT_CARDINALITY_ESTIMATION'
    Zwingt den Abfrageoptimierer, das Kardinalitätsschätzungsmodell zu verwenden, das dem aktuellen Kompatibilitätsgrad der Datenbank entspricht.Forces the Query Optimizer to use Cardinality Estimation model that corresponds to the current database compatibility level. Verwenden Sie diesen Hinweis, um die Einstellung LEGACY_CARDINALITY_ESTIMATION = ON für die Datenbankweit gültige Konfiguration zu überschreiben, oder das Ablaufverfolgungsflag 9481.Use this hint to override Database Scoped Configuration setting LEGACY_CARDINALITY_ESTIMATION = ON or trace flag 9481.

  • 'FORCE_LEGACY_CARDINALITY_ESTIMATION' 'FORCE_LEGACY_CARDINALITY_ESTIMATION'
    Zwingt den Abfrageoptimierer, das Modell Kardinalitätsschätzung von SQL Server 2012 (11.x)SQL Server 2012 (11.x) und Vorgängerversionen zu verwenden.Forces the Query Optimizer to use Cardinality Estimation model of SQL Server 2012 (11.x)SQL Server 2012 (11.x) and earlier versions. Dieser Hinweisname entspricht Ablaufverfolgungsflag 9481 oder der Einstellung LEGACY_CARDINALITY_ESTIMATION = ON für die Datenbankweit gültige Konfiguration.This hint name is equivalent to trace flag 9481 or Database Scoped Configuration setting LEGACY_CARDINALITY_ESTIMATION = ON.

  • QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n'QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n'
    Erzwingt das Verhalten des Abfrageoptimierers auf Abfrageebene.Forces the Query Optimizer behavior at a query level. Dieses Verhalten tritt auf, wenn die Abfrage mit Datenbank-Kompatibilitätsgrad n kompiliert wird, wobei n ein unterstützter Datenbank-Kompatibilitätsgrad ist.This behavior happens as if the query was compiled with database compatibility level n, where n is a supported database compatibility level. Unter sys.dm_exec_valid_use_hints finden Sie eine Liste der zurzeit unterstützten Werte für n.Refer to sys.dm_exec_valid_use_hints for a list of currently supported values for n.
    Gilt für: SQL ServerSQL Server (ab SQL Server 2017 (14.x)SQL Server 2017 (14.x) CU10).Applies to: SQL ServerSQL Server (starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CU10).

    Hinweis

    Der Hinweis QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n überschreibt keine standardmäßigen oder älteren Einstellungen für die Kardinalitätsschätzung, wenn er durch eine datenbankweite Konfiguration, ein Ablaufverfolgungsflag oder einen anderen Abfragehinweis wie QUERYTRACEON erzwungen wurde.The QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n hint doesn't override default or legacy cardinality estimation setting, if it's forced through database scoped configuration, trace flag or another query hint such as QUERYTRACEON.
    Dieser Hinweis betrifft nur das Verhalten des Abfrageoptimierers.This hint only affects the behavior of the Query Optimizer. Er wirkt sich nicht auf andere Features von SQL ServerSQL Server aus, die möglicherweise vom Datenbank-Kompatibilitätsgrad abhängig sind, wie z.B. die Verfügbarkeit bestimmter Datenbankfeatures.It doesn't affect other features of SQL ServerSQL Server that may depend on the database compatibility level, such as the availability of certain database features.
    Weitere Informationen zu diesem Hinweis finden Sie unter Developer's Choice: Hinting Query Execution model (Von Entwicklern inspiriert: Modell für die Ausführung von Hinweisabfragen).To learn more about this hint, see Developer's Choice: Hinting Query Execution model.

  • 'QUERY_PLAN_PROFILE''QUERY_PLAN_PROFILE'
    Aktiviert einfache Profilerstellung für die Abfrage.Enables lightweight profiling for the query. Wenn eine Abfrage, die diesen neuen Hinweis enthält, abgeschlossen wird, wird ein neues erweitertes Ereignis, query_plan_profile, ausgelöst.When a query that contains this new hint finishes, a new Extended Event, query_plan_profile, is fired. Dieses erweiterte Ereignis macht Ausführungsstatistiken und ein tatsächliches Ausführungsplan-XML verfügbar, das dem erweiterten Ereignis query_post_execution_showplan ähnelt, aber nur für Abfragen, die den neuen Hinweis enthalten.This extended event exposes execution statistics and actual execution plan XML similar to the query_post_execution_showplan extended event but only for queries that contains the new hint.
    Gilt für: SQL ServerSQL Server (ab SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP2 CU3 und SQL Server 2017 (14.x)SQL Server 2017 (14.x) CU11).Applies to: SQL ServerSQL Server (starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP2 CU3 and SQL Server 2017 (14.x)SQL Server 2017 (14.x) CU11).

    Hinweis

    Wenn Sie das Sammeln des erweiterten Ereignisses query_post_execution_showplan aktivieren, wird dadurch jeder Abfrage, die auf dem Server ausgeführt wird, eine Standard-Profilerstellungsinfrastruktur hinzugefügt, was die Gesamtleistung des Servers beeinträchtigen kann.If you enable collecting the query_post_execution_showplan extended event, this will add standard profiling infrastructure to every query that is running on the server and therefore may affect overall server performance.
    Wenn Sie das Sammeln des erweiterten Ereignisses query_thread_profile stattdessen für die Verwendung der einfachen Profilerstellungsinfrastruktur aktivieren, führt dies zu einem wesentlich geringeren Verarbeitungsaufwand, wirkt sich aber immer noch auf die Gesamtleistung des Servers aus.If you enable the collection of query_thread_profile extended event to use lightweight profiling infrastructure instead, this will result in much less performance overhead but will still affect overall server performance.
    Wenn Sie das erweiterte Ereignis „query_plan_profile“ aktivieren, aktiviert dies die einfache Profilerstellungsinfrastruktur nur für eine Abfrage, die mit dem QUERY_PLAN_PROFILE ausgeführt wurde, und wirkt sich deshalb nicht auf andere Workloads auf dem Server aus.If you enable the query_plan_profile extended event, this will only enable the lightweight profiling infrastructure for a query that executed with the QUERY_PLAN_PROFILE and therefore will not affect other workloads on the server. Verwenden Sie diesen Hinweis, um ein Profil für eine bestimmte Abfrage zu erstellen, ohne dabei andere Teile der Serverworkload zu beeinträchtigen.Use this hint to profile a specific query without affecting other parts of the server workload. Weitere Informationen zur einfachen Profilerstellung finden Sie unter Profilerstellungsinfrastruktur für Abfragen.To learn more about lightweight profiling, see Query Profiling Infrastructure.

Die Liste aller unterstützten USE HINT-Namen kann über die dynamische Verwaltungsansicht sys.dm_exec_valid_use_hints abgefragt werden.The list of all supported USE HINT names can be queried using the dynamic management view sys.dm_exec_valid_use_hints.

Tipp

Bei Hinweisnamen muss die Groß-/Kleinschreibung nicht beachtet werden.Hint names are case-insensitive.

Wichtig

Einige USE HINT-Hinweise stehen möglicherweise mit Ablaufverfolgungsflags, die auf globaler Ebene oder auf Sitzungsebene aktiviert sind, oder mit Einstellungen für die datenbankweit gültige Konfiguration in Konflikt.Some USE HINT hints may conflict with trace flags enabled at the global or session level, or database scoped configuration settings. In diesem Fall hat der Hinweis auf Abfrageebene (USE HINT) immer Vorrang.In this case, the query level hint (USE HINT) always takes precedence. Wenn ein USE HINT-Hinweis mit einem anderen Abfragehinweis oder einem auf Abfrageebene aktivierten Ablaufverfolgungsflag (z.B. QUERYTRACEON) in Konflikt steht, generiert SQL ServerSQL Server beim Versuch der Abfrageausführung einen Fehler.If a USE HINT conflicts with another query hint, or a trace flag enabled at the query level (such as by QUERYTRACEON), SQL ServerSQL Server will generate an error when trying to execute the query.

USE PLAN N'xml_plan'USE PLAN N'xml_plan'
Zwingt den Abfrageoptimierer, einen vorhandenen Abfrageplan für eine Abfrage zu verwenden, die mit ' xml_plan ' angegeben wird.Forces the Query Optimizer to use an existing query plan for a query that is specified by 'xml_plan'. USE PLAN kann nicht für die Anweisungen INSERT, UPDATE, MERGE oder DELETE angegeben werden.USE PLAN cannot be specified with INSERT, UPDATE, MERGE, or DELETE statements.

TABLE HINT ( exposed_object_name [ , <table_hint> [ [ , ]...n ] ] ) Wendet den angegebenen Tabellenhinweis auf die Tabelle oder die Ansicht an, die exposed_object_name entspricht.TABLE HINT (exposed_object_name [ , <table_hint> [ [, ]...n ] ] ) Applies the specified table hint to the table or view that corresponds to exposed_object_name. Es wird empfohlen, einen Tabellenhinweis nur im Kontext einer Planhinweisliste als Abfragehinweis zu verwenden.We recommend using a table hint as a query hint only in the context of a plan guide.

exposed_object_name kann einer der folgenden Verweise sein:exposed_object_name can be one of the following references:

  • Wenn für die Tabelle oder die Ansicht in der FROM-Klausel der Abfrage ein Alias verwendet wird, ist exposed_object_name der Alias.When an alias is used for the table or view in the FROM clause of the query, exposed_object_name is the alias.

  • Wenn kein Alias verwendet wird, entspricht exposed_object_name genau der Tabelle oder der Ansicht, auf die in der FROM-Klausel verwiesen wird.When an alias isn't used, exposed_object_name is the exact match of the table or view referenced in the FROM clause. Wenn z.B. mit einem zweiteiligen Namen auf die Tabelle oder die Ansicht verwiesen wird, ist exposed_object_name der gleiche zweiteilige Name.For example, if the table or view is referenced using a two-part name, exposed_object_name is the same two-part name.

Wenn Sie exposed_object_name angeben, ohne auch einen Tabellenhinweis anzugeben, werden alle Indizes, die Sie in der Abfrage als Teil eines Tabellenhinweises für das Objekt angeben, nicht berücksichtigt.When you specify exposed_object_name without also specifying a table hint, any indexes you specify in the query as part of a table hint for the object are disregarded. Die Abfrageoptimierer bestimmt dann, wie der Index zu verwenden ist.The Query Optimizer then determines index usage. Sie können diese Vorgehensweise verwenden, um die Auswirkung eines INDEX-Tabellenhinweises zu eliminieren, wenn Sie die ursprüngliche Abfrage nicht ändern können.You can use this technique to eliminate the effect of an INDEX table hint when you can't modify the original query. Siehe Beispiel J.See Example J.

<table_hint> ::= { [ NOEXPAND ] { INDEX ( index_value [ ,...n ] ) | INDEX = ( index_value ) | FORCESEEK [ ( index_value ( index_column_name [ , ... ] )) ]| FORCESCAN | HOLDLOCK | NOLOCK | NOWAIT | PAGLOCK | READCOMMITTED | READCOMMITTEDLOCK | READPAST | READUNCOMMITTED | REPEATABLEREAD | ROWLOCK | SERIALIZABLE | SNAPSHOT | SPATIAL_WINDOW_MAX_CELLS | TABLOCK | TABLOCKX | UPDLOCK | XLOCK } ist der Tabellenhinweis, der auf die Tabelle oder die Ansicht angewendet wird, die exposed_object_name als Abfragehinweis entspricht.<table_hint> ::= { [ NOEXPAND ] { INDEX ( index_value [ ,...n ] ) | INDEX = ( index_value ) | FORCESEEK [(index_value(index_column_name [,... ] )) ]| FORCESCAN | HOLDLOCK | NOLOCK | NOWAIT | PAGLOCK | READCOMMITTED | READCOMMITTEDLOCK | READPAST | READUNCOMMITTED | REPEATABLEREAD | ROWLOCK | SERIALIZABLE | SNAPSHOT | SPATIAL_WINDOW_MAX_CELLS | TABLOCK | TABLOCKX | UPDLOCK | XLOCK } Is the table hint to apply to the table or view that corresponds to exposed_object_name as a query hint. Eine Beschreibung dieser Hinweise finden Sie unter Tabellenhinweise (Transact-SQL).For a description of these hints, see Table Hints (Transact-SQL).

Andere Tabellenhinweise als INDEX, FORCESCAN und FORCESEEK sind als Abfragehinweise nicht zulässig, es sei denn, die Abfrage enthält bereits eine WITH-Klausel, die einen Tabellenhinweis angibt.Table hints other than INDEX, FORCESCAN, and FORCESEEK are disallowed as query hints unless the query already has a WITH clause specifying the table hint. Weitere Informationen finden Sie in den Hinweisen.For more information, see Remarks.

Achtung

Bei Angabe von FORCESEEK mit Parametern wird die Anzahl von Plänen, die vom Optimierer berücksichtigt werden können, stärker eingeschränkt als bei Angabe von FORCESEEK ohne Parameter.Specifying FORCESEEK with parameters limits the number of plans that can be considered by the optimizer more than when specifying FORCESEEK without parameters. Dies kann in mehreren Fällen zu dem Fehler führen, dass der Plan nicht generiert werden kann.This may cause a "Plan cannot be generated" error to occur in more cases. In zukünftigen Versionen können durch interne Änderungen des Optimierers möglicherweise mehr Pläne berücksichtigt werden.In a future release, internal modifications to the optimizer may allow more plans to be considered.

RemarksRemarks

Abfragehinweise können nur dann in einer INSERT-Anweisung angegeben werden, wenn eine SELECT-Klausel innerhalb der Anweisung verwendet wird.Query hints cannot be specified in an INSERT statement, except when a SELECT clause is used inside the statement.

Abfragehinweise können nur in der Abfrage der obersten Ebene angegeben werden, nicht in Unterabfragen.Query hints can be specified only in the top-level query, not in subqueries. Wenn ein Tabellenhinweis als Abfragehinweis angegeben wird, kann der Hinweis in der Abfrage der obersten Ebene oder in einer Unterabfrage angegeben werden.When a table hint is specified as a query hint, the hint can be specified in the top-level query or in a subquery. Der Wert, der für exposed_object_name in der TABLE HINT-Klausel angegeben wird, muss jedoch genau mit dem verfügbar gemachten Namen in der Abfrage oder Unterabfrage übereinstimmen.However, the value specified for exposed_object_name in the TABLE HINT clause must match exactly the exposed name in the query or subquery.

Angeben von Tabellenhinweisen als AbfragehinweiseSpecifying Table Hints as Query Hints

Es wird empfohlen, den INDEX-, FORCESCAN- oder FORCESEEK-Tabellenhinweis nur im Zusammenhang mit einer Planhinweisliste als Abfragehinweis zu verwenden.We recommend using the INDEX, FORCESCAN, or FORCESEEK table hint as a query hint only in the context of a plan guide. Planhinweislisten sind nützlich, wenn Sie die ursprüngliche Abfrage nicht ändern können, beispielsweise bei Anwendungen von Drittanbietern.Plan guides are useful when you can't modify the original query, for example, because it's a third-party application. Der in der Planhinweisliste angegebene Abfragehinweis wird vor dem Kompilieren und Optimieren zur Abfrage hinzugefügt.The query hint specified in the plan guide is added to the query before it's compiled and optimized. Verwenden Sie für Ad-hoc-Abfragen die TABLE HINT-Klausel nur dann, wenn Sie Planhinweislisten-Anweisungen testen.For ad-hoc queries, use the TABLE HINT clause only when testing plan guide statements. Es wird empfohlen, für alle anderen Ad-hoc-Abfragen diese Hinweise nur als Tabellenhinweise anzugeben.For all other ad-hoc queries, we recommend specifying these hints only as table hints.

Wenn die INDEX-, FORCESCAN- und FORCESEEK-Tabellenhinweise als Abfragehinweise angegeben werden, sind sie für die folgenden Objekte gültig:When specified as a query hint, the INDEX, FORCESCAN, and FORCESEEK table hints are valid for the following objects:

  • TabellenTables
  • SichtenViews
  • Indizierte SichtenIndexed views
  • Allgemeine Tabellenausdrücke (Der Hinweis muss in der SELECT-Anweisung angegeben sein, mit deren Resultset der allgemeine Tabellenausdruck aufgefüllt wird.)Common table expressions (the hint must be specified in the SELECT statement whose result set populates the common table expression)
  • Dynamische VerwaltungssichtenDynamic management views
  • Benannte UnterabfragenNamed subqueries

Sie können INDEX-, FORCESCAN- und FORCESEEK-Tabellenhinweise als Abfragehinweise für eine Abfrage angeben, die keine vorhandenen Tabellenhinweise enthält.You can specify INDEX, FORCESCAN, and FORCESEEK table hints as query hints for a query that doesn't have any existing table hints. Sie können sie auch verwenden, um bereits vorhandene INDEX-, FORCESCAN- oder FORCESEEK-Hinweise in der Abfrage zu ersetzen.You can also use them to replace existing INDEX, FORCESCAN, or FORCESEEK hints in the query, respectively.

Andere Tabellenhinweise als INDEX, FORCESCAN und FORCESEEK sind als Abfragehinweise nicht zulässig, es sei denn, die Abfrage enthält bereits eine WITH-Klausel, die einen Tabellenhinweis angibt.Table hints other than INDEX, FORCESCAN, and FORCESEEK are disallowed as query hints unless the query already has a WITH clause specifying the table hint. In diesem Fall muss auch ein übereinstimmender Hinweis als Abfragehinweis angegeben werden.In this case, a matching hint must also be specified as a query hint. Geben Sie den übereinstimmenden Hinweis als Abfragehinweis an, indem Sie TABLE HINT in der OPTION-Klausel verwenden.Specify the matching hint as a query hint by using TABLE HINT in the OPTION clause. Diese Spezifikation behält die Semantik der Abfrage bei.This specification preserves the query's semantics. Wenn die Abfrage beispielsweise den Tabellenhinweis „NOLOCK“ enthält, muss die Klausel „OPTION“ im Parameter @hints der Planhinweisliste ebenfalls den Hinweis „NOLOCK“ enthalten.For example, if the query contains the table hint NOLOCK, the OPTION clause in the @hints parameter of the plan guide must also contain the NOLOCK hint. Siehe Beispiel K.See Example K.

In einigen Szenarios tritt Fehler 8072 auf.Error 8072 occurs in a couple of scenarios. Ein Szenario ist, wenn Sie einen anderen Tabellenhinweis als INDEX, FORCESCAN oder FORCESEEK angeben, indem Sie TABLE HINT in der OPTION-Klausel ohne übereinstimmenden Abfragehinweis verwenden.One is when you specify a table hint other than INDEX, FORCESCAN, or FORCESEEK by using TABLE HINT in the OPTION clause without a matching query hint. Das zweite Szenario ist der umgekehrte Fall.The second scenario is the other way around. Dieser Fehler zeigt an, dass die OPTION-Klausel die Semantik der Abfrage ändern kann, und die Abfrage schlägt fehl.This error indicates the OPTION clause can cause the semantics of the query to change, and the query fails.

BeispieleExamples

A.A. Verwenden von MERGE JOINUsing MERGE JOIN

Das folgende Beispiel gibt an, dass MERGE JOIN den JOIN-Vorgang in der Abfrage ausführt.The following example specifies that MERGE JOIN runs the JOIN operation in the query. Im Beispiel wird die AdventureWorks2012AdventureWorks2012-Datenbank verwendet.The example uses the AdventureWorks2012AdventureWorks2012 database.

SELECT *   
FROM Sales.Customer AS c  
INNER JOIN Sales.CustomerAddress AS ca ON c.CustomerID = ca.CustomerID  
WHERE TerritoryID = 5  
OPTION (MERGE JOIN);  
GO    

B.B. Verwenden von OPTIMIZE FORUsing OPTIMIZE FOR

Im folgenden Beispiel wird der Abfrageoptimierer angewiesen, den Wert 'Seattle' für die lokale Variable @city_name zu verwenden, und statistische Daten zu verwenden, um während der Abfrageoptimierung den Wert der lokalen Variablen @postal_code zu bestimmen.The following example instructs the Query Optimizer to use the value 'Seattle' for local variable @city_name and to use statistical data to determine the value for the local variable @postal_code when optimizing the query. Im Beispiel wird die AdventureWorks2012AdventureWorks2012-Datenbank verwendet.The example uses the AdventureWorks2012AdventureWorks2012 database.

DECLARE @city_name nvarchar(30);  
DECLARE @postal_code nvarchar(15);  
SET @city_name = 'Ascheim';  
SET @postal_code = 86171;  
SELECT * FROM Person.Address  
WHERE City = @city_name AND PostalCode = @postal_code  
OPTION ( OPTIMIZE FOR (@city_name = 'Seattle', @postal_code UNKNOWN) );  
GO  

C.C. Verwenden von MAXRECURSIONUsing MAXRECURSION

MAXRECURSION kann verwendet werden, um zu verhindern, dass ein fehlerhaft formatierter allgemeiner Tabellenausdruck in eine Endlosschleife gerät.MAXRECURSION can be used to prevent a poorly formed recursive common table expression from entering into an infinite loop. Im folgenden Beispiel wird absichtlich eine Endlosschleife erstellt. Zudem wird der MAXRECURSION-Hinweis verwendet, um die Anzahl der Rekursionsebenen auf zwei zu begrenzen.The following example intentionally creates an infinite loop and uses the MAXRECURSION hint to limit the number of recursion levels to two. Im Beispiel wird die AdventureWorks2012AdventureWorks2012-Datenbank verwendet.The example uses the AdventureWorks2012AdventureWorks2012 database.

--Creates an infinite loop  
WITH cte (CustomerID, PersonID, StoreID) AS  
(  
    SELECT CustomerID, PersonID, StoreID  
    FROM Sales.Customer  
    WHERE PersonID IS NOT NULL  
  UNION ALL  
    SELECT cte.CustomerID, cte.PersonID, cte.StoreID  
    FROM cte   
    JOIN  Sales.Customer AS e   
        ON cte.PersonID = e.CustomerID  
)  
--Uses MAXRECURSION to limit the recursive levels to 2  
SELECT CustomerID, PersonID, StoreID  
FROM cte  
OPTION (MAXRECURSION 2);  
GO  

Sobald der Fehler im Code behoben wurde, wird MAXRECURSION nicht mehr benötigt.After the coding error is corrected, MAXRECURSION is no longer required.

D.D. Verwenden von MERGE UNIONUsing MERGE UNION

Im folgenden Beispiel wird der MERGE UNION-Abfragehinweis verwendet.The following example uses the MERGE UNION query hint. Im Beispiel wird die AdventureWorks2012AdventureWorks2012-Datenbank verwendet.The example uses the AdventureWorks2012AdventureWorks2012 database.

SELECT *  
FROM HumanResources.Employee AS e1  
UNION  
SELECT *  
FROM HumanResources.Employee AS e2  
OPTION (MERGE UNION);  
GO  

E.E. Verwenden von HASH GROUP und FASTUsing HASH GROUP and FAST

Im folgenden Beispiel werden der MERGE UNION- und der FAST-Abfragehinweis verwendet.The following example uses the HASH GROUP and FAST query hints. Im Beispiel wird die AdventureWorks2012AdventureWorks2012-Datenbank verwendet.The example uses the AdventureWorks2012AdventureWorks2012 database.

SELECT ProductID, OrderQty, SUM(LineTotal) AS Total  
FROM Sales.SalesOrderDetail  
WHERE UnitPrice < $5.00  
GROUP BY ProductID, OrderQty  
ORDER BY ProductID, OrderQty  
OPTION (HASH GROUP, FAST 10);  
GO    

F.F. Verwenden von MAXDOPUsing MAXDOP

Im folgenden Beispiel wird der MAXDOP-Abfragehinweis verwendet.The following example uses the MAXDOP query hint. Im Beispiel wird die AdventureWorks2012AdventureWorks2012-Datenbank verwendet.The example uses the AdventureWorks2012AdventureWorks2012 database.

SELECT ProductID, OrderQty, SUM(LineTotal) AS Total  
FROM Sales.SalesOrderDetail  
WHERE UnitPrice < $5.00  
GROUP BY ProductID, OrderQty  
ORDER BY ProductID, OrderQty  
OPTION (MAXDOP 2);    
GO

G.G. Verwenden von INDEXUsing INDEX

In den folgenden Beispielen wird der INDEX-Hinweis verwendet.The following examples use the INDEX hint. Im ersten Beispiel wird ein einzelner Index angegeben.The first example specifies a single index. Im zweiten Beispiel werden mehrere Indizes für einen einzelnen Tabellenverweis angegeben.The second example specifies multiple indexes for a single table reference. Da der INDEX-Hinweis auf eine Tabelle angewendet wird, die einen Alias verwendet, muss in beiden Beispielen in der TABLE HINT-Klausel auch der gleiche Alias wie der verfügbare Objektname angegeben werden.In both examples, because you apply the INDEX hint on a table that uses an alias, the TABLE HINT clause must also specify the same alias as the exposed object name. Im Beispiel wird die AdventureWorks2012AdventureWorks2012-Datenbank verwendet.The example uses the AdventureWorks2012AdventureWorks2012 database.

EXEC sp_create_plan_guide   
    @name = N'Guide1',   
    @stmt = N'SELECT c.LastName, c.FirstName, e.Title  
              FROM HumanResources.Employee AS e   
              JOIN Person.Contact AS c ON e.ContactID = c.ContactID  
              WHERE e.ManagerID = 2;',   
    @type = N'SQL',  
    @module_or_batch = NULL,   
    @params = NULL,   
    @hints = N'OPTION (TABLE HINT(e, INDEX (IX_Employee_ManagerID)))';  
GO  
EXEC sp_create_plan_guide   
    @name = N'Guide2',   
    @stmt = N'SELECT c.LastName, c.FirstName, e.Title  
              FROM HumanResources.Employee AS e  
              JOIN Person.Contact AS c ON e.ContactID = c.ContactID  
              WHERE e.ManagerID = 2;',   
    @type = N'SQL',  
    @module_or_batch = NULL,   
    @params = NULL,   
    @hints = N'OPTION (TABLE HINT(e, INDEX(PK_Employee_EmployeeID, IX_Employee_ManagerID)))';  
GO    

H.H. Verwenden von FORCESEEKUsing FORCESEEK

Im folgenden Beispiel wird der FORCESEEK-Tabellenhinweis verwendet.The following example uses the FORCESEEK table hint. Die TABLE HINT-Klausel muss auch den gleichen zweiteiligen Namen wie der Name des exponierten Objekts angeben.The TABLE HINT clause must also specify the same two-part name as the exposed object name. Geben Sie den Namen an, wenn Sie den INDEX-Hinweis auf eine Tabelle anwenden, die einen zweiteiligen Namen verwendet.Specify the name when you apply the INDEX hint on a table that uses a two-part name. Im Beispiel wird die AdventureWorks2012AdventureWorks2012-Datenbank verwendet.The example uses the AdventureWorks2012AdventureWorks2012 database.

EXEC sp_create_plan_guide   
    @name = N'Guide3',   
    @stmt = N'SELECT c.LastName, c.FirstName, HumanResources.Employee.Title  
              FROM HumanResources.Employee  
              JOIN Person.Contact AS c ON HumanResources.Employee.ContactID = c.ContactID  
              WHERE HumanResources.Employee.ManagerID = 3  
              ORDER BY c.LastName, c.FirstName;',   
    @type = N'SQL',  
    @module_or_batch = NULL,   
    @params = NULL,   
    @hints = N'OPTION (TABLE HINT( HumanResources.Employee, FORCESEEK))';  
GO    

I.I. Verwenden von mehreren TabellenhinweisenUsing multiple table hints

Im folgenden Beispiel wird der INDEX-Hinweis auf eine Tabelle angewendet, und der FORCESEEK-Hinweis wird auf eine andere Tabelle angewendet.The following example applies the INDEX hint to one table and the FORCESEEK hint to another. Im Beispiel wird die AdventureWorks2012AdventureWorks2012-Datenbank verwendet.The example uses the AdventureWorks2012AdventureWorks2012 database.

EXEC sp_create_plan_guide   
    @name = N'Guide4',   
    @stmt = N'SELECT e.ManagerID, c.LastName, c.FirstName, e.Title  
              FROM HumanResources.Employee AS e   
              JOIN Person.Contact AS c ON e.ContactID = c.ContactID  
              WHERE e.ManagerID = 3;',   
    @type = N'SQL',  
    @module_or_batch = NULL,   
    @params = NULL,   
    @hints = N'OPTION (TABLE HINT (e, INDEX( IX_Employee_ManagerID))   
                       , TABLE HINT (c, FORCESEEK))';  
GO  

J.J. Verwenden von TABLE HINT zum Überschreiben eines vorhandenen TabellenhinweisesUsing TABLE HINT to override an existing table hint

Im folgenden Beispiel wird die Verwendung des TABLE HINT-Hinweises gezeigt.The following example shows how to use the TABLE HINT hint. Sie können den Hinweis ohne Angabe eines Hinweises verwenden, um das Verhalten des INDEX-Tabellenhinweises zu überschreiben, den Sie in der FROM-Klausel der Abfrage angeben.You can use the hint without specifying a hint to override the INDEX table hint behavior you specify in the FROM clause of the query. Im Beispiel wird die AdventureWorks2012AdventureWorks2012-Datenbank verwendet.The example uses the AdventureWorks2012AdventureWorks2012 database.

EXEC sp_create_plan_guide   
    @name = N'Guide5',   
    @stmt = N'SELECT e.ManagerID, c.LastName, c.FirstName, e.Title  
              FROM HumanResources.Employee AS e WITH (INDEX (IX_Employee_ManagerID))  
              JOIN Person.Contact AS c ON e.ContactID = c.ContactID  
              WHERE e.ManagerID = 3;',   
    @type = N'SQL',  
    @module_or_batch = NULL,   
    @params = NULL,   
    @hints = N'OPTION (TABLE HINT(e))';  
GO    

K.K. Angeben von Tabellenhinweisen, die die Semantik beeinflussenSpecifying semantics-affecting table hints

Das folgende Beispiel enthält in der Abfrage zwei Tabellenhinweise: den NOLOCK-Hinweis, der die Semantik beeinflusst, und den INDEX-Hinweis, der die Semantik nicht beeinflusst.The following example contains two table hints in the query: NOLOCK, which is semantic-affecting, and INDEX, which is non-semantic-affecting. Der NOLOCK-Hinweis wird in der OPTIONS-Klausel der Planhinweisliste angegeben, um die Semantik der Abfrage beizubehalten.To preserve the semantics of the query, the NOLOCK hint is specified in the OPTIONS clause of the plan guide. Geben Sie neben dem NOLOCK-Hinweis die INDEX- und FORCESEEK-Hinweise an, und ersetzen Sie den nicht INDEX-Hinweis,der die Semantik nicht beeinflusst, in der Abfrage bei der Kompilierung und Optimierung von Anweisungen.Along with the NOLOCK hint, specify the INDEX and FORCESEEK hints and replace the non-semantic-affecting INDEX hint in the query during statement compilation and optimization. Im Beispiel wird die AdventureWorks2012AdventureWorks2012-Datenbank verwendet.The example uses the AdventureWorks2012AdventureWorks2012 database.

EXEC sp_create_plan_guide   
    @name = N'Guide6',   
    @stmt = N'SELECT c.LastName, c.FirstName, e.Title  
              FROM HumanResources.Employee AS e   
                   WITH (NOLOCK, INDEX (PK_Employee_EmployeeID))  
              JOIN Person.Contact AS c ON e.ContactID = c.ContactID  
              WHERE e.ManagerID = 3;',  
    @type = N'SQL',  
    @module_or_batch = NULL,   
    @params = NULL,   
    @hints = N'OPTION (TABLE HINT (e, INDEX(IX_Employee_ManagerID), NOLOCK, FORCESEEK))';  
GO    

Das folgende Beispiel zeigt eine alternative Methode, um die Semantik der Abfrage beizubehalten und zuzulassen, dass der Abfrageoptimierer einen anderen als den im Tabellenhinweis angegebenen Index verwendet.The following example shows an alternative method to preserving the semantics of the query and allowing the optimizer to choose an index other than the index specified in the table hint. Lassen Sie den Abfrageoptimierer wählen, indem Sie den NOLOCK-Hinweis in der OPTIONS-Klausel angeben.Allow the optimizer to choose by specifying the NOLOCK hint in the OPTIONS clause. Sie geben den Hinweis an, da er die Semantik beeinflusst.You specify the hint because it's semantic-affecting. Geben Sie dann das TABLE HINT-Schlüsselwort mit nur einem Tabellenverweis und ohne INDEX-Hinweis an.Then, specify the TABLE HINT keyword with only a table reference and no INDEX hint. Im Beispiel wird die AdventureWorks2012AdventureWorks2012-Datenbank verwendet.The example uses the AdventureWorks2012AdventureWorks2012 database.

EXEC sp_create_plan_guide   
    @name = N'Guide7',   
    @stmt = N'SELECT c.LastName, c.FirstName, e.Title  
              FROM HumanResources.Employee AS e   
                   WITH (NOLOCK, INDEX (PK_Employee_EmployeeID))  
              JOIN Person.Contact AS c ON e.ContactID = c.ContactID  
              WHERE e.ManagerID = 2;',  
    @type = N'SQL',  
    @module_or_batch = NULL,   
    @params = NULL,   
    @hints = N'OPTION (TABLE HINT (e, NOLOCK))';  
GO  

L.L. Verwenden von USE HINTUsing USE HINT

Im folgenden Beispiel werden der RECOMPILE- und der USE HINT-Abfragehinweis verwendet.The following example uses the RECOMPILE and USE HINT query hints. Im Beispiel wird die AdventureWorks2012AdventureWorks2012-Datenbank verwendet.The example uses the AdventureWorks2012AdventureWorks2012 database.

SELECT * FROM Person.Address  
WHERE City = 'SEATTLE' AND PostalCode = 98104
OPTION (RECOMPILE, USE HINT ('ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES', 'DISABLE_PARAMETER_SNIFFING')); 
GO  

Weitere InformationenSee Also

Hints (Transact-SQL) Hints (Transact-SQL)
sp_create_plan_guide (Transact-SQL) sp_create_plan_guide (Transact-SQL)
sp_control_plan_guide (Transact-SQL)sp_control_plan_guide (Transact-SQL)
Ablaufverfolgungsflags Trace Flags
Transact-SQL-SyntaxkonventionenTransact-SQL Syntax Conventions