Condividi tramite


Hint per la query (Transact-SQL)

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di AzureEndpoint di analisi SQL in Microsoft FabricWarehouse in Microsoft FabricDatabase SQL in Microsoft Fabric

Gli hint per la query specificano che gli hint indicati vengono usati nell'ambito di una query. Influiscono su tutti gli operatori nell'istruzione . Se UNION è coinvolto nella query principale, solo l'ultima query che include un'operazione di UNION può avere la clausola OPTION. Gli hint per la query vengono specificati come parte della clausola OPTION . L'errore 8622 si verifica se uno o più hint di query causano la mancata generazione di un piano valido da Parte di Query Optimizer.

Attenzione

Poiché Query Optimizer di SQL Server in genere seleziona il piano di esecuzione ottimale per una query, è consigliabile usare hint solo come ultima risorsa e sempre da parte di sviluppatori e amministratori esperti di database.

si applica a:

Convenzioni relative alla sintassi Transact-SQL

Sintassi

<query_hint> ::=
{ { HASH | ORDER } GROUP
  | { CONCAT | HASH | MERGE } UNION
  | { LOOP | MERGE | HASH } JOIN
  | DISABLE_OPTIMIZED_PLAN_FORCING
  | EXPAND VIEWS
  | FAST <integer_value>
  | FORCE ORDER
  | { FORCE | DISABLE } EXTERNALPUSHDOWN
  | { FORCE | DISABLE } SCALEOUTEXECUTION
  | IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
  | KEEP PLAN
  | KEEPFIXED PLAN
  | MAX_GRANT_PERCENT = <numeric_value>
  | MIN_GRANT_PERCENT = <numeric_value>
  | MAXDOP <integer_value>
  | MAXRECURSION <integer_value>
  | NO_PERFORMANCE_SPOOL
  | OPTIMIZE FOR ( @variable_name { UNKNOWN | = <literal_constant> } [ , ...n ] )
  | OPTIMIZE FOR UNKNOWN
  | PARAMETERIZATION { SIMPLE | FORCED }
  | QUERYTRACEON <integer_value>
  | RECOMPILE
  | ROBUST PLAN
  | USE HINT ( <use_hint_name> [ , ...n ] )
  | USE PLAN N'<xml_plan>'
  | TABLE HINT ( <exposed_object_name> [ , <table_hint> [ [ , ] ...n ] ] )
  | FOR TIMESTAMP AS OF '<point_in_time>'
}

<table_hint> ::=
{ NOEXPAND [ , INDEX ( <index_value> [ , ...n ] ) | INDEX = ( <index_value> ) ]
  | 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_value>
  | TABLOCK
  | TABLOCKX
  | UPDLOCK
  | XLOCK
}

<use_hint_name> ::=
{ 'ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS'
  | 'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES'
  | 'ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES'
  | 'ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES'
  | 'DISABLE_BATCH_MODE_ADAPTIVE_JOINS'
  | 'DISABLE_BATCH_MODE_MEMORY_GRANT_FEEDBACK'
  | 'DISABLE_DEFERRED_COMPILATION_TV'
  | 'DISABLE_INTERLEAVED_EXECUTION_TVF'
  | 'DISABLE_OPTIMIZED_NESTED_LOOP'
  | 'DISABLE_OPTIMIZER_ROWGOAL'
  | 'DISABLE_PARAMETER_SNIFFING'
  | 'DISABLE_ROW_MODE_MEMORY_GRANT_FEEDBACK'
  | 'DISABLE_TSQL_SCALAR_UDF_INLINING'
  | 'DISALLOW_BATCH_MODE'
  | 'ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS'
  | 'ENABLE_QUERY_OPTIMIZER_HOTFIXES'
  | 'FORCE_DEFAULT_CARDINALITY_ESTIMATION'
  | 'FORCE_LEGACY_CARDINALITY_ESTIMATION'
  | 'QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n'
  | 'QUERY_PLAN_PROFILE'
}

Argomenti

{ HASH | ORDER } GROUP

Specifica che le aggregazioni descritte dalla clausola GROUP BY o DISTINCT della query devono usare hash o ordinamento.

  • In genere, un algoritmo basato su hash può migliorare le prestazioni delle query che coinvolgono set di raggruppamenti di grandi dimensioni o complessi.
  • In genere, un algoritmo basato su ordinamento può migliorare le prestazioni delle query che coinvolgono set di raggruppamenti piccoli o semplici.

{ MERGE | HASH | CONCAT } UNION

Specifica che tutte le operazioni di UNION vengono eseguite mediante l'unione, l'hashing o la concatenazione di set di UNION. Se vengono specificati più hint UNION, Query Optimizer seleziona la strategia meno costosa da tali hint specificati.

  • In genere, un'operazione dell'algoritmo basato su merge può migliorare le prestazioni delle query che coinvolgono input ordinati.
  • In genere, un algoritmo basato su hash può migliorare le prestazioni delle query che comportano input non ordinamento o di grandi dimensioni.
  • In genere, un algoritmo basato su concatenazione può migliorare le prestazioni delle query che coinvolgono input distinti o di piccole dimensioni.

{ LOOP | MERGE | HASH } JOIN

Specifica che tutte le operazioni di join vengono eseguite da LOOP JOIN, MERGE JOINo HASH JOIN nell'intera query. Se si specifica più hint di join, l'utilità di ottimizzazione seleziona la strategia di join meno costosa da quelle consentite.

Se si specifica un hint di join nella clausola FROM della stessa query per una coppia di tabelle specifica, questo hint di join ha la precedenza nell'unione delle due tabelle. Gli hint per la query, tuttavia, devono comunque essere rispettati. L'hint di join per la coppia di tabelle potrebbe limitare solo la selezione dei metodi di join consentiti nell'hint per la query. Per altre informazioni, vedere hint di join.

DISABLE_OPTIMIZED_PLAN_FORCING

Si applica a: SQL Server, a partire da SQL Server 2022 (16.x)

Disabilita forzatura del piano ottimizzato per una query.

La forzatura del piano ottimizzato riduce il sovraccarico di compilazione per le query ripetitive imposte. Al completamento della generazione del piano di esecuzione delle query, alcuni specifici passaggi di compilazione vengono archiviati in modo che sia possibile riusarli come script per l'ottimizzazione della riproduzione. Uno script di ottimizzazione della riproduzione viene archiviato come parte del file XML dello showplan compresso in Query Store, in un attributo OptimizationReplay nascosto.

ESPANDERE LE VISUALIZZAZIONI

Specifica che le viste indicizzate vengono espanse. Specifica inoltre che Query Optimizer non considera alcuna vista indicizzata come sostituzione per qualsiasi parte di query. Una vista viene espansa quando la definizione della vista sostituisce il nome della vista nel testo della query.

Questo hint per la query non consente praticamente l'uso diretto di viste indicizzate e indici nelle viste indicizzate nel piano di query.

Nota

La vista indicizzata rimane ridotta se è presente un riferimento diretto alla vista nella parte SELECT della query. La vista rimane condensata anche se si specifica WITH (NOEXPAND) o WITH (NOEXPAND, INDEX( <index_value> [ , *...n* ] ) ). Per altre informazioni sull'hint di query NOEXPAND, vedere Using NOEXPAND.

L'hint influisce solo sulle visualizzazioni nella parte SELECT delle istruzioni, incluse quelle viste in INSERT, UPDATE, MERGEe DELETE istruzioni .

FAST integer_value

Specifica che la query è ottimizzata per il recupero rapido del primo integer_value numero di righe. Questo risultato è un numero intero non negativo. Dopo la restituzione del primo integer_value numero di righe, la query continua l'esecuzione e produce il set di risultati completo.

FORCE ORDER

Specifica che l'ordine di join indicato dalla sintassi della query viene mantenuto durante l'ottimizzazione della query. L'uso di FORCE ORDER non influisce sul possibile comportamento di inversione dei ruoli di Query Optimizer.

FORCE ORDER mantiene l'ordine di join specificato nella query, che potrebbe migliorare le prestazioni o la coerenza delle query che comportano condizioni di join o hint complessi.

Nota

In un'istruzione MERGE, la tabella di origine è accessibile prima della tabella di destinazione come ordine di join predefinito, a meno che non venga specificata la clausola WHEN SOURCE NOT MATCHED. Se si specifica FORCE ORDER, questo comportamento predefinito viene mantenuto.

{ FORCE | DISABLE } EXTERNALPUSHDOWN

Forzare o disabilitare il pushdown del calcolo delle espressioni qualificate in Hadoop. Si applica solo alle query che usano PolyBase. Non esegue il push nell'archiviazione di Azure.

{ FORCE | DISABLE } SCALEOUTEXECUTION

Forzare o disabilitare l'esecuzione con scalabilità orizzontale di query PolyBase che usano tabelle esterne in cluster Big Data di SQL Server 2019. Questo hint viene rispettato solo da una query usando l'istanza master di un cluster Big Data SQL. La scalabilità orizzontale si verifica nel pool di calcolo del cluster Big Data.

KEEP PLAN

Modifica le soglie di ricompilazione per le tabelle temporanee e le rende identiche alle soglie per le tabelle permanenti. La soglia di ricompilazione stimata avvia una ricompilazione automatica per la query quando il numero stimato di modifiche alle colonne indicizzate viene apportato a una tabella eseguendo una delle istruzioni seguenti:

  • UPDATE
  • DELETE
  • MERGE
  • INSERT

Se si specifica KEEP PLAN assicurarsi che una query non venga ricompilata più frequentemente quando sono presenti più aggiornamenti di una tabella.

KEEPFIXED PLAN

Forza Query Optimizer a non ricompilare una query a causa delle modifiche apportate alle statistiche. Se si specifica KEEPFIXED PLAN assicurarsi che una query venga ricompilazione solo se lo schema delle tabelle sottostanti viene modificato o se sp_recompile viene eseguito su tali tabelle.

IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX

si applica a: SQL Server (a partire da SQL Server 2012 (11.x)).

Impedisce alla query di usare un indice columnstore ottimizzato per la memoria non cluster. Se la query contiene l'hint per la query per evitare l'uso dell'indice columnstore e un hint di indice per l'uso di un indice columnstore, gli hint sono in conflitto e la query restituisce un errore.

MAX_GRANT_PERCENT = <numeric_value>

si applica a: SQL Server (a partire da SQL Server 2012 (11.x) Service Pack 3, SQL Server 2014 (12.x) Service Pack 2 e database SQL di Azure.

Dimensione massima della concessione di memoria in PERCENT del limite di memoria configurato. La query non supera questo limite se la query è in esecuzione in un pool di risorse definito dall'utente. In questo caso, se la query non ha la memoria minima necessaria, il sistema genera un errore. Se una query è in esecuzione nel pool di sistema (impostazione predefinita), ottiene almeno la memoria necessaria per l'esecuzione. Il limite effettivo può essere inferiore se l'impostazione di Resource Governor è inferiore al valore specificato da questo hint. I valori validi sono compresi tra 0,0 e 100,0.

L'hint per la concessione di memoria non è disponibile per la creazione o la ricompilazione dell'indice.

MIN_GRANT_PERCENT = <numeric_value>

si applica a: SQL Server (a partire da SQL Server 2012 (11.x) Service Pack 3, SQL Server 2014 (12.x) Service Pack 2 e database SQL di Azure.

Dimensioni minime della concessione di memoria in PERCENT del limite di memoria configurato. È garantito che la query ottenga MAX(required memory, min grant) perché è necessaria almeno la memoria necessaria per avviare una query. I valori validi sono compresi tra 0,0 e 100,0.

L'opzione di concessione di memoria min_grant_percent sostituisce l'opzione sp_configure (memoria minima per query (KB)) indipendentemente dalle dimensioni. L'hint per la concessione di memoria non è disponibile per la creazione o la ricompilazione dell'indice.

<integer_value> MAXDOP

si applica a: SQL Server (a partire da SQL Server 2008 (10.0.x)) e database SQL di Azure.

Esegue l'override dell'opzione di configurazione massimo grado di parallelismo di sp_configure. Esegue anche l'override di Resource Governor per la query specificando questa opzione. L'hint per la query MAXDOP può superare il valore configurato con sp_configure. Se MAXDOP supera il valore configurato con Resource Governor, il motore di database usa il valore di Resource Governor MAXDOP descritto in ALTER WORKLOAD GROUP. Tutte le regole semantiche usate con l'opzione di configurazione massimo grado di parallelismo sono applicabili quando si usa l'hint per la query MAXDOP. Per altre informazioni, vedere Configurare l'opzione di configurazione del server max degree of parallelism.

Avvertimento

Se MAXDOP è impostato su zero, il server sceglie il massimo grado di parallelismo.

<INTEGER_VALUE> MAXRECURSION

Specifica il numero massimo di ricorsi consentiti per la query. numero è un numero intero positivo compreso tra 0 e 32.767. Quando si specifica 0, non viene applicato alcun limite. Se questa opzione non è specificata, il limite predefinito per il server è 100.

Quando viene raggiunto il numero specificato o predefinito per MAXRECURSION limite durante l'esecuzione della query, la query termina e restituisce un errore.

A causa di questo errore, viene eseguito il rollback di tutti gli effetti dell'istruzione. Se l'istruzione è un'istruzione SELECT, potrebbero essere restituiti risultati parziali o nessun risultato. I risultati parziali restituiti potrebbero non includere tutte le righe nei livelli di ricorsione oltre il livello di ricorsione massimo specificato.

Per altre informazioni, vedere WITH common_table_expression.

NO_PERFORMANCE_SPOOL

si applica a: SQL Server (a partire da SQL Server 2016 (13.x)) e database SQL di Azure.

Impedisce l'aggiunta di un operatore di spool ai piani di query , ad eccezione dei piani in cui è necessario lo spooling per garantire una semantica di aggiornamento valida. L'operatore spool può ridurre le prestazioni in alcuni scenari. Ad esempio, lo spool usa tempdbe tempdb contesa può verificarsi se sono presenti molte query simultanee in esecuzione con le operazioni di spooling.

OPTIMIZE FOR ( @variable_name { UNKNOWN | = <literal_constant> } [ , ... n ] )

Indica a Query Optimizer di usare un valore specifico per una variabile locale quando la query viene compilata e ottimizzata. Il valore viene utilizzato solo durante l'ottimizzazione della query e non durante l'esecuzione.

  • @variable_name

    Nome di una variabile locale usata in una query, a cui è possibile assegnare un valore da usare con l'hint di query OPTIMIZE FOR.

  • UNKNOWN

    Specifica che Query Optimizer usa dati statistici anziché il valore iniziale per determinare il valore di una variabile locale durante l'ottimizzazione della query.

  • literal_constant

    Valore costante letterale da assegnare @variable_name da usare con l'hint di query OPTIMIZE FOR. literal_constant viene usato solo durante l'ottimizzazione delle query e non come valore di @variable_name durante l'esecuzione della query. literal_constant può essere di qualsiasi tipo di dati di sistema di SQL Server che può essere espresso come costante letterale. Il tipo di dati di literal_constant deve essere convertibile in modo implicito nel tipo di dati che @variable_name riferimenti nella query.

OPTIMIZE FOR può contrastare il comportamento predefinito di rilevamento dei parametri di Optimizer. Usare anche OPTIMIZE FOR quando si creano guide di piano. Per altre informazioni, vedere Ricompilare una stored procedure.

OTTIMIZZARE PER SCONOSCIUTO

Indica a Query Optimizer di usare la selettività media del predicato in tutti i valori di colonna, anziché usare il valore del parametro di runtime quando la query viene compilata e ottimizzata.

Se si usano OPTIMIZE FOR @variable_name = <literal_constant> e OPTIMIZE FOR UNKNOWN nello stesso hint per la query, Query Optimizer usa il literal_constant specificato per un valore specifico. Query Optimizer usa UNKNOWN per il resto dei valori delle variabili. I valori vengono usati solo durante l'ottimizzazione della query e non durante l'esecuzione della query.

PARAMETERIZATION { SIMPLE | FORCED }

Specifica le regole di parametrizzazione che Query Optimizer di SQL Server applica alla query durante la compilazione.

Importante

L'hint per la query PARAMETERIZATION può essere specificato solo all'interno di una guida di piano per eseguire l'override dell'impostazione corrente dell'opzione SET database PARAMETERIZATION. Non può essere specificato direttamente all'interno di una query.

Per altre informazioni, vedere Specificare il comportamento di parametrizzazione delle query tramite guide di piano.

SIMPLE indica a Query Optimizer di tentare la parametrizzazione semplice. FORCED indica a Query Optimizer di tentare la parametrizzazione forzata. Per altre informazioni, vedere Parametrizzazione forzata nella Guida all'architettura di elaborazione querye parametrizzazione semplice nella Guida all'architettura di elaborazione delle query.

QUERYTRACEON <integer_value>

Questa opzione consente di abilitare un flag di traccia che influisce sul piano solo durante la compilazione a query singola. Analogamente ad altre opzioni a livello di query, è possibile usarla insieme alle guide di piano per trovare la corrispondenza con il testo di una query eseguita da qualsiasi sessione e applicare automaticamente un flag di traccia che influisce sul piano quando la query viene compilata. L'opzione QUERYTRACEON è supportata solo per i flag di traccia di Query Optimizer. Per altre informazioni, vedere flag di traccia .

L'uso di questa opzione non restituisce alcun errore o avviso se viene usato un numero di flag di traccia non supportato. Se il flag di traccia specificato non è uno che influisce su un piano di esecuzione della query, l'opzione viene ignorata automaticamente.

Per usare più flag di traccia in una query, specificare un hint QUERYTRACEON per ogni numero di flag di traccia diverso.

RICOMPILARE

Indica al motore di database di SQL Server di generare un nuovo piano temporaneo per la query e rimuovere immediatamente tale piano dopo il completamento dell'esecuzione della query. Il piano di query generato non sostituisce un piano archiviato nella cache quando la stessa query viene eseguita senza l'hint RECOMPILE. Senza specificare RECOMPILE, il motore di database memorizza nella cache i piani di query e li riutilizza. Quando i piani di query vengono compilati, l'hint per la query RECOMPILE usa i valori correnti di qualsiasi variabile locale nella query. Se la query si trova all'interno di una stored procedure, i valori correnti passati a qualsiasi parametro.

RECOMPILE è un'alternativa utile alla creazione di una stored procedure. RECOMPILE utilizza la clausola WITH RECOMPILE quando è necessario ricompilare solo un subset di query all'interno della stored procedure anziché l'intera stored procedure. Per altre informazioni, vedere Ricompilare una stored procedure. RECOMPILE è utile anche quando si creano guide di piano.

PIANO ROBUSTO

Forza Query Optimizer a provare un piano che funzioni per le dimensioni massime potenziali delle righe, eventualmente a scapito delle prestazioni. Quando la query viene elaborata, le tabelle intermedie e gli operatori potrebbero dover archiviare ed elaborare righe più ampie di una delle righe di input durante l'elaborazione della query. Le righe potrebbero essere così ampie che, a volte, l'operatore specifico non può elaborare la riga. Se le righe sono ampie, il motore di database genera un errore durante l'esecuzione della query. Usando ROBUST PLAN, si indica a Query Optimizer di non considerare i piani di query che potrebbero verificarsi in questo problema.

Se tale piano non è possibile, Query Optimizer restituisce un errore anziché rinviare il rilevamento degli errori all'esecuzione della query. Le righe possono contenere colonne a lunghezza variabile; Il motore di database consente di definire righe con dimensioni massime superiori alla capacità del motore di database di elaborarle. In genere, nonostante le dimensioni massime potenziali, un'applicazione archivia le righe con dimensioni effettive entro i limiti che il motore di database può elaborare. Se il motore di database si trova in una riga troppo lunga, viene restituito un errore di esecuzione.

USE HINT ( 'hint_name' )

si applica a: SQL Server (a partire da SQL Server 2016 (13.x) SP1) e database SQL di Azure.

Fornisce uno o più hint aggiuntivi per Query Processor. Gli hint aggiuntivi vengono specificati con un nome di hint all'interno di virgolette singole.

Suggerimento

I nomi degli hint non fanno distinzione tra maiuscole e minuscole.

Sono supportati i nomi dei suggerimenti seguenti:

Alludere Descrizione
'ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS' Genera un piano di query usando il presupposto di contenimento semplice anziché il presupposto predefinito di contenimento di base per i join, in Query Optimizer modello di stima della cardinalità di SQL Server 2014 (12.x) e versioni successive. Questo nome di hint equivale a flag di traccia 9476.
'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES' Genera un piano usando la selettività minima durante la stima dei predicati AND per i filtri per tenere conto della correlazione completa. Questo nome di hint equivale a flag di traccia 4137 quando viene usato con il modello di stima della cardinalità di SQL Server 2012 (11.x) e versioni precedenti e ha un effetto simile quando flag di traccia 9471 viene usato con il modello di stima della cardinalità di SQL Server 2014 (12.x) e versioni successive.
'ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES' Genera un piano usando la massima selettività durante la stima dei predicati AND per i filtri per tenere conto dell'indipendenza completa. Questo nome di hint è il comportamento predefinito del modello di stima della cardinalità di SQL Server 2012 (11.x) e versioni precedenti ed equivalente a flag di traccia 9472 quando viene usato con il modello di stima della cardinalità di SQL Server 2014 (12.x) e versioni successive.

Si applica a: Database SQL di Azure
'ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES' Genera un piano che usa la maggior parte della selettività minima durante la stima dei predicati AND per i filtri per tenere conto della correlazione parziale. Questo nome di hint è il comportamento predefinito del modello di stima della cardinalità di SQL Server 2014 (12.x) e versioni successive.

Si applica a: Database SQL di Azure
'DISABLE_BATCH_MODE_ADAPTIVE_JOINS' Disabilita i join adattivi in modalità batch. Per altre informazioni, vedere join adattivi in modalità batch .

Si applica a: SQL Server 2017 (14.x) e versioni successive e database SQL di Azure
'DISABLE_BATCH_MODE_MEMORY_GRANT_FEEDBACK' Disabilita il feedback delle concessioni di memoria in modalità batch. Per altre informazioni, vedere feedback sulle concessioni di memoria in modalità Batch.

Si applica a: SQL Server 2017 (14.x) e versioni successive e database SQL di Azure
'DISABLE_DEFERRED_COMPILATION_TV' Disabilita la compilazione posticipata delle variabili di tabella. Per altre informazioni, vedere Compilazione posticipata delle variabili di tabella.

Si applica a: SQL Server 2019 (15.x) e versioni successive e database SQL di Azure
'DISABLE_INTERLEAVED_EXECUTION_TVF' Disabilita l'esecuzione interleaved per le funzioni con valori di tabella con più istruzioni. Per altre informazioni, vedere 'esecuzione interleaved per le funzioni con valori di tabella a più istruzioni.

Si applica a: SQL Server 2017 (14.x) e versioni successive e database SQL di Azure
'DISABLE_OPTIMIZED_NESTED_LOOP' Indica a Query Processor di non usare un'operazione di ordinamento (ordinamento batch) per i join di cicli annidati ottimizzati durante la generazione di un piano di query. Questo nome di hint equivale a flag di traccia 2340. Questo hint si applica anche agli ordinamenti espliciti e ai batch.
'DISABLE_OPTIMIZER_ROWGOAL' Fa sì che SQL Server generi un piano che non usi modifiche agli obiettivi di riga con query che contengono queste parole chiave:

- TOP
- OPTION (FAST N)
- IN
- EXISTS

Questo nome di hint equivale a flag di traccia 4138.
'DISABLE_PARAMETER_SNIFFING' Indica a Query Optimizer di usare la distribuzione media dei dati durante la compilazione di una query con uno o più parametri. Questa istruzione rende il piano di query indipendente dal valore del parametro usato per la prima volta durante la compilazione della query. Questo nome di hint equivale a flag di traccia 4136 o configurazione con ambito database impostazione PARAMETER_SNIFFING = OFF.
'DISABLE_ROW_MODE_MEMORY_GRANT_FEEDBACK' Disabilita il feedback delle concessioni di memoria in modalità riga. Per altre informazioni, vedere feedback delle concessioni di memoria in modalità riga.

Si applica a: SQL Server 2019 (15.x) e versioni successive e database SQL di Azure
'DISABLE_TSQL_SCALAR_UDF_INLINING' Disabilita l'inlining di funzioni definite dall'utente scalari. Per altre informazioni, vedere L'inlining di funzioni definite dall'utente scalari.

Si applica a: SQL Server 2019 (15.x) e versioni successive e database SQL di Azure
'DISALLOW_BATCH_MODE' Disabilita l'esecuzione in modalità batch. Per altre informazioni, vedere modalità di esecuzione.

Si applica a: SQL Server 2019 (15.x) e versioni successive e database SQL di Azure
'ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS' Abilita le statistiche rapide generate automaticamente (modifica istogramma) per qualsiasi colonna di indice iniziale per la quale è necessaria la stima della cardinalità. L'istogramma usato per stimare la cardinalità viene regolato in fase di compilazione della query per tenere conto del valore massimo o minimo effettivo di questa colonna. Questo nome di hint equivale a flag di traccia 4139.
'ENABLE_QUERY_OPTIMIZER_HOTFIXES' Abilita gli hotfix di Query Optimizer (modifiche rilasciate negli aggiornamenti cumulativi di SQL Server e nei Service Pack). Questo nome di hint equivale a flag di traccia 4199 o configurazione con ambito database impostazione QUERY_OPTIMIZER_HOTFIXES = ON.
'FORCE_DEFAULT_CARDINALITY_ESTIMATION' Forza Query Optimizer a usare modello di stima della cardinalità che corrisponde al livello di compatibilità del database corrente. Usare questo hint per eseguire l'override configurazione con ambito database impostazione LEGACY_CARDINALITY_ESTIMATION = ON o flag di traccia 9481.
'FORCE_LEGACY_CARDINALITY_ESTIMATION' Forza Query Optimizer a usare modello di stima della cardinalità di SQL Server 2012 (11.x) e versioni precedenti. Questo nome di hint equivale a flag di traccia 9481 o configurazione con ambito database impostazione LEGACY_CARDINALITY_ESTIMATION = ON.
'QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n' 1 Forza il comportamento di Query Optimizer a livello di query. Questo comportamento si verifica come se la query fosse compilata con il livello di compatibilità del database n, dove n è un livello di compatibilità del database supportato. Per un elenco dei valori attualmente supportati per n, vedere sys.dm_exec_valid_use_hints.

si applica a: SQL Server 2017 (14.x) CU 10 e versioni successive e database SQL di Azure
'QUERY_PLAN_PROFILE' 2 Abilita la profilatura leggera per la query. Al termine di una query contenente questo nuovo hint, viene generato un nuovo evento esteso, query_plan_profile, . Questo evento esteso espone le statistiche di esecuzione e il codice XML effettivo del piano di esecuzione simile all'evento esteso query_post_execution_showplan, ma solo per le query che contengono il nuovo hint.

si applica a: SQL Server 2016 (13.x) SP 2 CU 3, SQL Server 2017 (14.x) CU 11 e versioni successive

1 L'hint QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n non esegue l'override dell'impostazione di stima della cardinalità predefinita o legacy, se viene forzata tramite la configurazione con ambito database, il flag di traccia o un altro hint di query, ad esempio QUERYTRACEON. Questo hint influisce solo sul comportamento di Query Optimizer. Non influisce su altre funzionalità di SQL Server che potrebbero dipendere dal livello di compatibilità del database , ad esempio la disponibilità di determinate funzionalità del database. Per altre informazioni, vedere Developer's Choice: Hinting Query Execution model.

2 Se si abilita la raccolta dell'evento esteso query_post_execution_showplan, l'infrastruttura di profilatura standard viene aggiunta a ogni query in esecuzione nel server e pertanto può influire sulle prestazioni complessive del server. Se si abilita la raccolta di query_thread_profile evento esteso per l'uso dell'infrastruttura di profilatura leggera, ciò comporta un sovraccarico di prestazioni molto inferiore, ma influisce comunque sulle prestazioni complessive del server. Se si abilita l'evento esteso query_plan_profile, questa operazione abilita solo l'infrastruttura di profilatura leggera per una query eseguita con il query_plan_profile e pertanto non influisce su altri carichi di lavoro nel server. Usare questo hint per profilare una query specifica senza influire sulle altre parti del carico di lavoro del server. Per altre informazioni sulla profilatura leggera, vedere Infrastruttura di profilatura query.

È possibile eseguire query sull'elenco di tutti i nomi di USE HINT supportati usando la vista a gestione dinamica sys.dm_exec_valid_use_hints.

Importante

Alcuni hint USE HINT potrebbero essere in conflitto con i flag di traccia abilitati a livello globale o di sessione o le impostazioni di configurazione con ambito database. In questo caso, l'hint a livello di query (USE HINT) ha sempre la precedenza. Se un USE HINT è in conflitto con un altro hint per la query o un flag di traccia abilitato a livello di query (ad esempio da QUERYTRACEON), SQL Server genererà un errore quando si tenta di eseguire la query.

USE PLAN N'xml_plan'

Forza Query Optimizer a usare un piano di query esistente per una query specificata da xml_plan. non è possibile specificare USE PLAN con istruzioni INSERT, UPDATE, MERGEo DELETE.

Il piano di esecuzione risultante forzato da questa funzionalità è lo stesso o simile al piano forzato. Poiché il piano risultante potrebbe non essere identico al piano specificato da USE PLAN, le prestazioni dei piani possono variare. In rari casi, la differenza di prestazioni può essere significativa e negativa; in tal caso, l'amministratore deve rimuovere il piano forzato.

TABLE HINT ( exposed_object_name [ , <table_hint> [ [ , ] ... n ] ] )

Applica l'hint di tabella specificato alla tabella o alla vista corrispondente a exposed_object_name. È consigliabile usare un hint di tabella come hint per la query solo nel contesto di una guida di piano.

exposed_object_name può essere uno dei riferimenti seguenti:

  • Quando viene usato un alias per la tabella o la vista nella clausola FROM della query, exposed_object_name è l'alias.

  • Quando non viene usato un alias, exposed_object_name corrisponde esattamente alla tabella o alla vista a cui viene fatto riferimento nella clausola FROM. Ad esempio, se viene fatto riferimento alla tabella o alla vista usando un nome in due parti, exposed_object_name è lo stesso nome in due parti.

Quando si specifica exposed_object_name senza specificare anche un hint di tabella, gli indici specificati nella query come parte di un hint di tabella per l'oggetto vengono ignorati. Query Optimizer determina quindi l'utilizzo dell'indice. È possibile usare questa tecnica per eliminare l'effetto di un hint di tabella INDEX quando non è possibile modificare la query originale. Vedere esempio J.

<table_hint>

NOEXPAND [ , INDEX ( index_value [ ,... n ] ) | INDEX = ( index_value ) ] | 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_value | TABLOCK | TABLOCKX | UPDLOCK | XLOCK

Hint di tabella da applicare alla tabella o alla vista che corrisponde a exposed_object_name come hint per la query. Per una descrizione di questi hint, vedere hint di tabella.

Gli hint di tabella diversi da INDEX, FORCESCANe FORCESEEK non sono consentiti come hint per la query, a meno che la query non abbia già una clausola WITH che specifica l'hint di tabella. Per altre informazioni, vedere la sezione Osservazioni.

Attenzione

Se si specifica FORCESEEK con parametri, il numero di piani che possono essere considerati da Query Optimizer è maggiore di quando si specifica FORCESEEK senza parametri. Questo potrebbe causare l'errore "Non è possibile generare un piano" in più casi.

FOR TIMESTAMP AS OF 'point_in_time'

si applica a: Microsoft Fabric Data Warehouse

Usare la sintassi TIMESTAMP nella clausola OPTION per eseguire query sui dati esistenti in passato, parte della funzionalità di spostamento del tempo in Synapse Data Warehouse in Microsoft Fabric.

Specificare il point_in_time nel formato yyyy-MM-ddTHH:mm:ss[.fff] per restituire i dati visualizzati in quel momento. Il fuso orario è sempre in formato UTC. Usare la sintassi di CONVERT per il formato datetime necessario con stile 126.

L'hint TIMESTAMP AS OF può essere specificato una sola volta usando la clausola OPTION. Per altre informazioni e limitazioni, vedere Eseguire query sui dati esistenti in passato.

FORCE [ SINGLE NODE | DISTRIBUTED ] PLAN

si applica a: Microsoft Fabric Data Warehouse

Consente all'utente di scegliere se forzare un piano a nodo singolo o un piano distribuito per l'esecuzione della query.

Osservazioni:

Non è possibile specificare hint di query in un'istruzione INSERT, tranne quando viene usata una clausola SELECT all'interno dell'istruzione .

Gli hint per la query possono essere specificati solo nella query di primo livello, non nelle sottoquery. Quando un hint di tabella viene specificato come hint per la query, l'hint può essere specificato nella query di primo livello o in una sottoquery. Tuttavia, il valore specificato per exposed_object_name nella clausola TABLE HINT deve corrispondere esattamente al nome esposto nella query o nella sottoquery.

Specificare hint di tabella come hint per la query

È consigliabile usare l'hint di tabella INDEX, FORCESCANo FORCESEEK come hint per la query solo nel contesto di una guida di piano . Le guide di piano sono utili quando non è possibile modificare la query originale, ad esempio perché si tratta di un'applicazione di terze parti. L'hint per la query specificato nella guida di piano viene aggiunto alla query prima della compilazione e ottimizzato. Per le query ad hoc, usare la clausola TABLE HINT solo quando si testano le istruzioni della guida di piano. Per tutte le altre query ad hoc, è consigliabile specificare questi hint solo come hint di tabella.

Se specificato come hint per la query, gli hint di tabella INDEX, FORCESCANe FORCESEEK sono validi per gli oggetti seguenti:

  • Tabelle
  • Visualizzazioni
  • Viste indicizzate
  • Espressioni di tabella comuni (l'hint deve essere specificato nell'istruzione SELECT il cui set di risultati popola l'espressione di tabella comune)
  • DMVs (Viste di Gestione Dinamica)
  • Sottoquery denominate

È possibile specificare INDEX, FORCESCANe FORCESEEK hint di tabella come hint di query per una query che non dispone di hint di tabella esistenti. È anche possibile usarli per sostituire rispettivamente gli hint INDEXesistenti, FORCESCANo FORCESEEK nella query.

Gli hint di tabella diversi da INDEX, FORCESCANe FORCESEEK non sono consentiti come hint per la query, a meno che la query non abbia già una clausola WITH che specifica l'hint di tabella. In questo caso, un hint corrispondente deve essere specificato anche come hint per la query. Specificare l'hint corrispondente come hint per la query usando TABLE HINT nella clausola OPTION. Questa specifica mantiene la semantica della query. Ad esempio, se la query contiene l'hint di tabella NOLOCK, la clausola OPTION nel parametro @hints della guida di piano deve contenere anche l'hint NOLOCK. Vedere esempio K.

Specificare hint con hint di Query Store

È possibile applicare hint alle query identificate tramite Query Store senza apportare modifiche al codice, usando la funzionalità hint di Query Store. Utilizzare la stored procedure sys.sp_query_store_set_hints per applicare un hint a una query. Vedere l'esempio N.

Supporto degli hint per le query in Fabric Data Warehouse

microsoft fabric data warehouse supporta un subset di hint per la query:

  • HASH GROUP
  • ORDER GROUP
  • MERGE UNION
  • HASH UNION
  • CONCAT UNION
  • FORCE ORDER
  • USE HINT
    • ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES
    • ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES
    • ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES
    • ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS

Questi hint per la query sono esclusivi di Microsoft Fabric Data Warehouse:

  • FORCE SINGLE NODE PLAN, FORCE DISTRIBUTED PLAN

Esempi

A. Usare MERGE JOIN

Nell'esempio seguente viene specificato che MERGE JOIN esegue l'operazione di JOIN nella query. Nell'esempio viene utilizzato il database AdventureWorks2022.

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. Usare OPTIMIZE FOR

Nell'esempio seguente viene indicato a Query Optimizer di usare il valore 'Seattle' per @city_name e di usare la selettività media del predicato in tutti i valori di colonna per @postal_code durante l'ottimizzazione della query. Nell'esempio viene utilizzato il database AdventureWorks2022.

CREATE PROCEDURE dbo.RetrievePersonAddress
@city_name NVARCHAR(30),
@postal_code NVARCHAR(15)
AS
SELECT * FROM Person.Address
WHERE City = @city_name AND PostalCode = @postal_code
OPTION ( OPTIMIZE FOR (@city_name = 'Seattle', @postal_code UNKNOWN) );
GO

C. Usare MAXRECURSION

MAXRECURSION può essere usato per impedire che un'espressione di tabella comune ricorsiva non corretta venga immessa in un ciclo infinito. L'esempio seguente crea intenzionalmente un ciclo infinito e usa l'hint MAXRECURSION per limitare il numero di livelli di ricorsione a due. Nell'esempio viene utilizzato il database AdventureWorks2022.

--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

Dopo aver corretto l'errore di codifica, MAXRECURSION non è più necessario.

D. Usare MERGE UNION

Nell'esempio seguente viene usato l'hint per la query MERGE UNION. Nell'esempio viene utilizzato il database AdventureWorks2022.

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

E. Usare HASH GROUP e FAST

Nell'esempio seguente vengono usati gli hint di query HASH GROUP e FAST. Nell'esempio viene utilizzato il database AdventureWorks2022.

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. Usare MAXDOP

Nell'esempio seguente viene usato l'hint per la query MAXDOP. Nell'esempio viene utilizzato il database AdventureWorks2022.

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. Usare INDEX

Gli esempi seguenti usano l'hint INDEX. Il primo esempio specifica un singolo indice. Il secondo esempio specifica più indici per un riferimento a una singola tabella. In entrambi gli esempi, poiché si applica l'hint INDEX in una tabella che usa un alias, la clausola TABLE HINT deve specificare anche lo stesso alias del nome dell'oggetto esposto. Nell'esempio viene utilizzato il database AdventureWorks2022.

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. Usare FORCESEEK

Nell'esempio seguente viene usato l'hint di tabella FORCESEEK. La clausola TABLE HINT deve inoltre specificare lo stesso nome in due parti del nome dell'oggetto esposto. Specificare il nome quando si applica l'hint INDEX in una tabella che usa un nome in due parti. Nell'esempio viene utilizzato il database AdventureWorks2022.

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. Usare più hint di tabella

Nell'esempio seguente viene applicato l'hint INDEX a una tabella e all'hint FORCESEEK a un altro. Nell'esempio viene utilizzato il database AdventureWorks2022.

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. Usare TABLE HINT per eseguire l'override di un hint di tabella esistente

Nell'esempio seguente viene illustrato come usare l'hint TABLE HINT. È possibile usare l'hint senza specificare un hint per eseguire l'override del comportamento dell'hint di tabella INDEX specificato nella clausola FROM della query. Nell'esempio viene utilizzato il database AdventureWorks2022.

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. Specificare hint di tabella che influiscono sulla semantica

L'esempio seguente contiene due hint di tabella nella query: NOLOCK, che influisce sulla semantica e INDEX, che non influisce sulla semantica. Per mantenere la semantica della query, l'hint NOLOCK viene specificato nella clausola OPTIONS della guida di piano. Insieme all'hint NOLOCK, specificare gli hint INDEX e FORCESEEK e sostituire l'hint INDEX che non influisce sulla semantica nella query durante la compilazione e l'ottimizzazione delle istruzioni. Nell'esempio viene utilizzato il database AdventureWorks2022.

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

Nell'esempio seguente viene illustrato un metodo alternativo per mantenere la semantica della query e consentire a Optimizer di scegliere un indice diverso dall'indice specificato nell'hint della tabella. Consentire a Optimizer di scegliere specificando l'hint NOLOCK nella clausola OPTIONS. Specificare l'hint perché influisce sulla semantica. Specificare quindi la parola chiave TABLE HINT con solo un riferimento alla tabella e nessun hint INDEX. Nell'esempio viene utilizzato il database AdventureWorks2022.

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. Use USE HINT

Nell'esempio seguente vengono usati gli hint di query RECOMPILE e USE HINT. Nell'esempio viene utilizzato il database AdventureWorks2022.

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

M. Usare QUERYTRACEON HINT

Nell'esempio seguente vengono usati gli hint per la query QUERYTRACEON. Nell'esempio viene utilizzato il database AdventureWorks2022. È possibile abilitare tutti gli hotfix che influiscono sul piano controllati dal flag di traccia 4199 per una determinata query usando la query seguente:

SELECT * FROM Person.Address
WHERE City = 'SEATTLE' AND PostalCode = 98104
OPTION (QUERYTRACEON 4199);

È anche possibile usare più flag di traccia come nella query seguente:

SELECT * FROM Person.Address
WHERE City = 'SEATTLE' AND PostalCode = 98104
OPTION  (QUERYTRACEON 4199, QUERYTRACEON 4137);

N. Usare gli hint di Query Store

Gli hint query store funzionalità nel database SQL di Azure offrono un metodo facile da usare per modellare i piani di query senza modificare il codice dell'applicazione.

Identificare prima di tutto la query già eseguita nelle viste del catalogo di Query Store, ad esempio:

SELECT q.query_id, qt.query_sql_text
FROM sys.query_store_query_text qt
INNER JOIN sys.query_store_query q ON
    qt.query_text_id = q.query_text_id
WHERE query_sql_text like N'%ORDER BY ListingPrice DESC%'
  AND query_sql_text not like N'%query_store%';
GO

L'esempio seguente applica l'hint per forzare la stima della cardinalità legacy a query_id 39, identificata in Query Store:

EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(USE HINT(''FORCE_LEGACY_CARDINALITY_ESTIMATION''))';

L'esempio seguente applica l'hint per applicare una dimensione massima di concessione di memoria in PERCENT del limite di memoria configurato a query_id 39, identificato in Query Store:

EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(MAX_GRANT_PERCENT=10)';

L'esempio seguente applica più hint di query a query_id 39, tra cui RECOMPILE, MAXDOP 1e il comportamento di Query Optimizer di SQL Server 2012 (11.x):

EXEC sys.sp_query_store_set_hints @query_id= 39,
    @query_hints = N'OPTION(RECOMPILE, MAXDOP 1, USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_110''))';

O. Eseguire query sui dati a partire da un punto nel tempo

si applica a: Warehouse in Microsoft Fabric

Usare la sintassi TIMESTAMP nella clausola OPTION per eseguire query sui dati esistenti in passato, in Synapse Data Warehouse in Microsoft Fabric. La query di esempio seguente restituisce i dati visualizzati il 13 marzo 2024 alle 17:39:35.28 UTC. Il fuso orario è sempre in formato UTC.

SELECT OrderDateKey, SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey
OPTION (FOR TIMESTAMP AS OF '2024-03-13T19:39:35.28');--March 13, 2024 at 7:39:35.28 PM UTC