Hint per la query (Transact-SQL)
Si applica a:SQL Server
Database SQL di Azure
Istanza gestita di SQL di Azure
Endpoint di analisi SQL in Microsoft Fabric
Warehouse in Microsoft Fabric
Database 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 JOIN
o 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
, MERGE
e 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 tempdb
e 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
, MERGE
o 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
, FORCESCAN
e 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
, FORCESCAN
o 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
, FORCESCAN
e 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
, FORCESCAN
e 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 INDEX
esistenti, FORCESCAN
o FORCESEEK
nella query.
Gli hint di tabella diversi da INDEX
, FORCESCAN
e 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 1
e 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