Dicas de consulta (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados
SQL do Azure Instância Gerenciada de SQL do Azure Ponto de extremidade de análise de SQL no Microsoft Fabric Warehouse no Microsoft Fabric
Banco
de dados SQL no Microsoft Fabric
As dicas de consulta especificam que as dicas indicadas são usadas no escopo de uma consulta. Eles afetam todos os operadores na instrução. Se UNION
estiver envolvido na consulta principal, somente a última consulta envolvendo uma operação de UNION
poderá ter a cláusula OPTION
. As dicas de consulta são especificadas como parte da cláusula OPTION. O erro 8622 ocorre se uma ou mais dicas de consulta fazem com que o Otimizador de Consultas não gere um plano válido.
Cuidado
Como o Otimizador de Consulta do SQL Server normalmente seleciona o melhor plano de execução para uma consulta, recomendamos usar apenas dicas como último recurso para desenvolvedores experientes e administradores de banco de dados.
aplica-se a:
Convenções de sintaxe de Transact-SQL
Sintaxe
<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'
}
Argumentos
{ HASH | ORDER } GROUP
Especifica que as agregações descritas pela cláusula GROUP BY
ou DISTINCT
da consulta devem usar hash ou ordenação.
- Em geral, um algoritmo baseado em hash pode melhorar o desempenho de consultas que envolvem conjuntos de agrupamento grandes ou complexos.
- Geralmente, um algoritmo baseado em classificação pode melhorar o desempenho de consultas que envolvem conjuntos de agrupamento pequenos ou simples.
{ MERGE | HASH | CONCAT } UNION
Especifica que todas as operações de UNION
são executadas mesclando, hash ou concatenando conjuntos de UNION
. Se mais de uma dica UNION
for especificada, o Otimizador de Consulta selecionará a estratégia mais barata dessas dicas especificadas.
- Geralmente, uma operação de algoritmo baseada em mesclagem pode melhorar o desempenho de consultas que envolvem entradas classificadas.
- Em geral, um algoritmo baseado em hash pode melhorar o desempenho de consultas que envolvem entradas não variadas ou grandes.
- Geralmente, um algoritmo baseado em concatenação pode melhorar o desempenho de consultas que envolvem entradas distintas ou pequenas.
{ LOOP | MERGE | HASH } JOIN
Especifica que todas as operações de junção são executadas por LOOP JOIN
, MERGE JOIN
ou HASH JOIN
em toda a consulta. Se você especificar mais de uma dica de junção, o otimizador selecionará a estratégia de junção mais barata das permitidas.
Se você especificar uma dica de junção na cláusula FROM
da mesma consulta para um par de tabela específico, essa dica de junção terá precedência na junção das duas tabelas. As dicas de consulta, no entanto, ainda devem ser respeitadas. A dica de junção para o par de tabelas pode restringir apenas a seleção de métodos de junção permitidos na dica de consulta. Para obter mais informações, consulte Dicas de junção.
DISABLE_OPTIMIZED_PLAN_FORCING
Aplica-se a: SQL Server (a partir do SQL Server 2022 (16.x))
Desabilita plano otimizado forçando para uma consulta.
A obrigação do plano otimizado reduz a sobrecarga de compilação para repetir consultas forçadas. Depois que o plano de execução de consulta é gerado, as etapas de compilação específicas são armazenadas para reutilização como um script de reprodução de otimização. Um script de reprodução de otimização é armazenado como parte do XML do plano de execução compactado no Repositório de Consultas, em um atributo OptimizationReplay
oculto.
EXPANDIR EXIBIÇÕES
Especifica que as exibições indexadas são expandidas. Também especifica que o Otimizador de Consulta não considera nenhuma exibição indexada como uma substituição para qualquer parte de consulta. Uma exibição é expandida quando a definição de exibição substitui o nome da exibição no texto da consulta.
Essa dica de consulta praticamente não permite o uso direto de exibições indexadas e índices em exibições indexadas no plano de consulta.
Observação
A exibição indexada permanecerá condensada se houver uma referência direta à exibição na parte SELECT
da consulta. A exibição também permanecerá condensada se você especificar WITH (NOEXPAND)
ou WITH (NOEXPAND, INDEX( <index_value> [ , *...n* ] ) )
. Para obter mais informações sobre a dica de consulta NOEXPAND
, consulte Usando oNOEXPAND.
A dica afeta apenas os modos de exibição na parte SELECT
das instruções, incluindo as exibições nas instruções INSERT
, UPDATE
, MERGE
e DELETE
.
integer_value FAST
Especifica que a consulta é otimizada para recuperação rápida do primeiro integer_value número de linhas. Esse resultado é um inteiro não negativo. Depois que o primeiro integer_value número de linhas é retornado, a consulta continua a execução e produz seu conjunto de resultados completo.
ORDEM DE FORÇA
Especifica que a ordem de junção indicada pela sintaxe da consulta é preservada durante a otimização da consulta. Usar FORCE ORDER
não afeta o comportamento de reversão de função possível do Otimizador de Consulta.
FORCE ORDER
preserva a ordem de junção especificada na consulta, o que pode melhorar o desempenho ou a consistência de consultas que envolvem condições ou dicas de junção complexas.
Observação
Em uma instrução MERGE
, a tabela de origem é acessada antes da tabela de destino como a ordem de junção padrão, a menos que a cláusula WHEN SOURCE NOT MATCHED
seja especificada. Especificar FORCE ORDER
preserva esse comportamento padrão.
{ FORCE | DISABLE } EXTERNALPUSHDOWN
Force ou desabilite o pushdown da computação de expressões qualificadas no Hadoop. Aplica-se apenas a consultas usando o PolyBase. Não envia push para o armazenamento do Azure.
{ FORCE | DISABLE } SCALEOUTEXECUTION
Forçar ou desabilitar a execução horizontal de consultas PolyBase que estão usando tabelas externas em clusters de Big Data do SQL Server 2019. Essa dica só é respeitada por uma consulta usando a instância mestra de um Cluster de Big Data do SQL. A expansão ocorre no pool de computação do cluster de Big Data.
MANTER PLANO
Altera os limites de recompilação para tabelas temporárias e os torna idênticos aos limites das tabelas permanentes. O limite de recompilação estimado inicia um recompilamento automático para a consulta quando o número estimado de alterações de coluna indexadas é feito em uma tabela executando uma das seguintes instruções:
UPDATE
DELETE
MERGE
INSERT
Especificar KEEP PLAN
garante que uma consulta não seja recompilada com tanta frequência quando há várias atualizações em uma tabela.
PLANO KEEPFIXED
Força o Otimizador de Consulta a não recompilar uma consulta devido a alterações nas estatísticas. Especificar KEEPFIXED PLAN
garante que uma consulta recompile somente se o esquema das tabelas subjacentes for alterado ou se sp_recompile
for executado nessas tabelas.
IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
aplica-se a: SQL Server (começando pelo SQL Server 2012 (11.x)).
Impede que a consulta use um índice columnstore otimizado para memória não clusterizado. Se a consulta contiver a dica de consulta para evitar o uso do índice columnstore e uma dica de índice para usar um índice columnstore, as dicas estarão em conflito e a consulta retornará um erro.
MAX_GRANT_PERCENT = <numeric_value>
aplica-se a: SQL Server (a partir do SQL Server 2012 (11.x) Service Pack 3, SQL Server 2014 (12.x) Service Pack 2 e Banco de Dados SQL do Azure.
O tamanho máximo de concessão de memória em PERCENT
do limite de memória configurado. A consulta é garantida para não exceder esse limite se a consulta estiver em execução em um pool de recursos definido pelo usuário. Nesse caso, se a consulta não tiver a memória mínima necessária, o sistema gerará um erro. Se uma consulta estiver em execução no pool do sistema (padrão), ela obterá, no mínimo, a memória necessária para ser executada. O limite real poderá ser menor se a configuração do Administrador de Recursos for menor do que o valor especificado por essa dica. Os valores válidos estão entre 0,0 e 100,0.
A dica de concessão de memória não está disponível para criação de índice ou recompilação de índice.
MIN_GRANT_PERCENT = <numeric_value>
aplica-se a: SQL Server (a partir do SQL Server 2012 (11.x) Service Pack 3, SQL Server 2014 (12.x) Service Pack 2 e Banco de Dados SQL do Azure.
O tamanho mínimo de concessão de memória em PERCENT
do limite de memória configurado. A consulta tem a garantia de obter MAX(required memory, min grant)
porque pelo menos a memória necessária é necessária para iniciar uma consulta. Os valores válidos estão entre 0,0 e 100,0.
A opção de concessão de memória min_grant_percent substitui a opção sp_configure
(memória mínima por consulta (KB)), independentemente do tamanho. A dica de concessão de memória não está disponível para criação de índice ou recompilação de índice.
MAXDOP <integer_value>
aplica-se a: SQL Server (começando com o SQL Server 2008 (10.0.x)) e o Banco de Dados SQL do Azure.
Substitui o grau máximo de paralelismo opção de configuração de sp_configure
. Também substitui o Administrador de Recursos para a consulta que especifica essa opção. A dica de consulta MAXDOP
pode exceder o valor configurado com sp_configure
. Se MAXDOP
exceder o valor configurado com o Resource Governor, o Mecanismo de Banco de Dados usará o valor MAXDOP
do Administrador de Recursos, descrito em ALTER WORKLOAD GROUP. Todas as regras semânticas usadas com o grau máximo de paralelismo opção de configuração são aplicáveis quando você usa a dica de consulta MAXDOP
. Para obter mais informações, veja Configurar a opção max degree of parallelism de configuração de servidor.
Aviso
Se MAXDOP
for definido como zero, o servidor escolherá o grau máximo de paralelismo.
MAXRECURSION <integer_value>
Especifica o número máximo de recursões permitidas para essa consulta. número é um número inteiro positivo entre 0 e 32.767. Quando 0 é especificado, nenhum limite é aplicado. Se essa opção não for especificada, o limite padrão para o servidor será 100.
Quando o número especificado ou padrão para MAXRECURSION
limite é atingido durante a execução da consulta, a consulta termina e um erro é retornado.
Devido a esse erro, todos os efeitos da instrução são revertidos. Se a instrução for uma instrução SELECT
, os resultados parciais ou nenhum resultado poderão ser retornados. Quaisquer resultados parciais retornados podem não incluir todas as linhas em níveis de recursão além do nível de recursão máximo especificado.
Para obter mais informações, consulte WITH common_table_expression.
NO_PERFORMANCE_SPOOL
aplica-se a: SQL Server (começando com o SQL Server 2016 (13.x)) e o Banco de Dados SQL do Azure.
Impede que um operador de spool seja adicionado aos planos de consulta (exceto para os planos quando o spool é necessário para garantir a semântica de atualização válida). O operador de spool pode reduzir o desempenho em alguns cenários. Por exemplo, o spool usa tempdb
e tempdb
contenção pode ocorrer se houver muitas consultas simultâneas em execução com as operações de spool.
OPTIMIZE FOR ( @variable_name { UNKNOWN | = <literal_constant> } [ , ... n ] )
Instrui o Otimizador de Consulta a usar um valor específico para uma variável local quando a consulta é compilada e otimizada. O valor é usado somente durante a otimização da consulta e não durante sua execução.
@variable_name
O nome de uma variável local usada em uma consulta, à qual um valor pode ser atribuído para uso com a dica de consulta
OPTIMIZE FOR
.UNKNOWN
Especifica que o Otimizador de Consulta usa dados estatísticos em vez do valor inicial para determinar o valor de uma variável local durante a otimização da consulta.
literal_constant
Um valor de constante literal a ser atribuído @variable_name para uso com a dica de consulta
OPTIMIZE FOR
. literal_constant é usado somente durante a otimização da consulta e não como o valor de @variable_name durante a execução da consulta. literal_constant pode ser de qualquer tipo de dados do sistema do SQL Server que possa ser expresso como uma constante literal. O tipo de dados de literal_constant deve ser implicitamente conversível para o tipo de dados que @variable_name referências na consulta.
OPTIMIZE FOR pode contrariar o comportamento de detecção de parâmetro padrão do otimizador. Use também OPTIMIZE FOR
ao criar guias de plano. Para obter mais informações, confira Recompilar um procedimento armazenado.
OTIMIZAR PARA DESCONHECIDO
Instrui o Otimizador de Consulta a usar a seletividade média do predicado em todos os valores de coluna, em vez de usar o valor do parâmetro de runtime quando a consulta é compilada e otimizada.
Se você usar OPTIMIZE FOR @variable_name = <literal_constant>
e OPTIMIZE FOR UNKNOWN
na mesma dica de consulta, o Otimizador de Consulta usará o literal_constant especificado para um valor específico. O Otimizador de Consulta usa UNKNOWN para o restante dos valores de variável. Os valores são usados somente durante a otimização da consulta e não durante a execução da consulta.
PARAMETERIZATION { SIMPLE | FORCED }
Especifica as regras de parametrização que o Otimizador de Consulta do SQL Server aplica à consulta quando ela é compilada.
Importante
A dica de consulta PARAMETERIZATION
só pode ser especificada dentro de um guia de plano para substituir a configuração atual da opção SET
de banco de dados PARAMETERIZATION
. Ele não pode ser especificado diretamente em uma consulta.
Para obter mais informações, consulte especificar o comportamento de parametrização de consulta usando guias de plano.
SIMPLE
instrui o Otimizador de Consulta a tentar a parametrização simples.
FORCED
instrui o Otimizador de Consulta a tentar a parametrização forçada. Para obter mais informações, consulte Parametrização forçada no guia de arquitetura de processamento de consultae parametrização simples no guia de arquitetura de processamento de consulta.
<INTEGER_VALUE> QUERYTRACEON
Essa opção permite habilitar um sinalizador de rastreamento que afeta o plano somente durante a compilação de consulta única. Como outras opções de nível de consulta, você pode usá-la junto com guias de plano para corresponder ao texto de uma consulta que está sendo executada em qualquer sessão e aplicar automaticamente um sinalizador de rastreamento que afeta o plano quando essa consulta está sendo compilada. A opção QUERYTRACEON
só tem suporte para sinalizadores de rastreamento do Otimizador de Consulta. Para obter mais informações, consulte sinalizadores de rastreamento.
Usar essa opção não retornará nenhum erro ou aviso se um número de sinalizador de rastreamento sem suporte for usado. Se o sinalizador de rastreamento especificado não for aquele que afeta um plano de execução de consulta, a opção será ignorada silenciosamente.
Para usar mais de um sinalizador de rastreamento em uma consulta, especifique uma dica QUERYTRACEON
para cada número de sinalizador de rastreamento diferente.
RECOMPILAR
Instrui o Mecanismo de Banco de Dados do SQL Server a gerar um novo plano temporário para a consulta e descartar imediatamente esse plano após a conclusão da execução da consulta. O plano de consulta gerado não substitui um plano armazenado em cache quando a mesma consulta é executada sem a dica de RECOMPILE
. Sem especificar RECOMPILE
, o Mecanismo de Banco de Dados armazena em cache planos de consulta e os reutiliza. Quando os planos de consulta são compilados, a dica de consulta RECOMPILE
usa os valores atuais de qualquer variável local na consulta. Se a consulta estiver dentro de um procedimento armazenado, os valores atuais serão passados para qualquer parâmetro.
RECOMPILE
é uma alternativa útil para criar um procedimento armazenado.
RECOMPILE
usa a cláusula WITH RECOMPILE
quando apenas um subconjunto de consultas dentro do procedimento armazenado, em vez de todo o procedimento armazenado, deve ser recompilado. Para obter mais informações, confira Recompilar um procedimento armazenado.
RECOMPILE
também é útil ao criar guias de plano.
PLANO ROBUSTO
Força o Otimizador de Consulta a tentar um plano que funcione para o tamanho máximo de linha potencial, possivelmente em detrimento do desempenho. Quando a consulta é processada, tabelas intermediárias e operadores podem ter que armazenar e processar linhas mais amplas do que qualquer uma das linhas de entrada quando a consulta é processada. As linhas podem ser tão largas que, às vezes, o operador específico não pode processar a linha. Se as linhas forem tão largas, o Mecanismo de Banco de Dados produzirá um erro durante a execução da consulta. Usando ROBUST PLAN
, você instrui o Otimizador de Consultas a não considerar os planos de consulta que possam encontrar esse problema.
Se esse plano não for possível, o Otimizador de Consulta retornará um erro em vez de adiar a detecção de erros para a execução da consulta. As linhas podem conter colunas de comprimento variável; O Mecanismo de Banco de Dados permite que linhas sejam definidas que tenham um tamanho potencial máximo além da capacidade do Mecanismo de Banco de Dados de processá-las. Geralmente, apesar do tamanho máximo potencial, um aplicativo armazena linhas que têm tamanhos reais dentro dos limites que o Mecanismo de Banco de Dados pode processar. Se o Mecanismo de Banco de Dados se deparar com uma linha muito longa, um erro de execução será retornado.
USE HINT ( 'hint_name' )
aplica-se a: SQL Server (começando com SQL Server 2016 (13.x) SP1) e Banco de Dados SQL do Azure.
Fornece uma ou mais dicas extras para o processador de consulta. As dicas extras são especificadas com um nome de dica entre aspas simples.
Dica
Nomes de dicas não diferenciam maiúsculas de minúsculas.
Há suporte para os seguintes nomes de dica:
Dica | Descrição |
---|---|
'ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS'
|
Gera um plano de consulta usando a suposição de Contenção Simples em vez da suposição de contenção base padrão para junções, no otimizador de consulta o modelo de estimativa de cardinalidade do SQL Server 2014 (12.x) e versões posteriores. Esse nome de dica é equivalente a sinalizador de rastreamento 9476. |
'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES'
|
Gera um plano usando a seletividade mínima ao estimar predicados AND para filtros que explicam a correlação completa. Esse nome de dica é equivalente a sinalizador de rastreamento 4137 quando usado com o modelo de estimativa de cardinalidade do SQL Server 2012 (11.x) e versões anteriores, e tem efeito semelhante quando Sinalizador de Rastreamento 9471 é usado com o modelo de estimativa de cardinalidade do SQL Server 2014 (12.x) e versões posteriores. |
'ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES' |
Gera um plano usando a seletividade máxima ao estimar predicados AND para filtros a serem responsáveis pela independência total. Esse nome de dica é o comportamento padrão do modelo de estimativa de cardinalidade do SQL Server 2012 (11.x) e versões anteriores e equivalente a Sinalizador de Rastreamento 9472 quando usado com o modelo de estimativa de cardinalidade do SQL Server 2014 (12.x) e versões posteriores. aplica-se a: Banco de Dados SQL do Azure |
'ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES' |
Gera um plano usando a maior ou menos seletividade ao estimar predicados AND para filtros que explicam a correlação parcial. Esse nome de dica é o comportamento padrão do modelo de estimativa de cardinalidade do SQL Server 2014 (12.x) e versões posteriores. aplica-se a: Banco de Dados SQL do Azure |
'DISABLE_BATCH_MODE_ADAPTIVE_JOINS' |
Desabilita junções adaptáveis do modo de lote. Para obter mais informações, consulte junções adaptáveis do modo lote. Aplica-se a: SQL Server 2017 (14.x) e versões posteriores e Banco de Dados SQL do Azure |
'DISABLE_BATCH_MODE_MEMORY_GRANT_FEEDBACK' |
Desabilita os comentários de concessão de memória do modo de lote. Para obter mais informações, consulte comentários de concessão de memória do modo lote. Aplica-se a: SQL Server 2017 (14.x) e versões posteriores e Banco de Dados SQL do Azure |
'DISABLE_DEFERRED_COMPILATION_TV' |
Desabilita a compilação adiada da variável de tabela. Para saber mais, veja Compilação adiada de variável da tabela. Aplica-se a: SQL Server 2019 (15.x) e versões posteriores e Banco de Dados SQL do Azure |
'DISABLE_INTERLEAVED_EXECUTION_TVF' |
Desabilita a execução intercalada para funções com valor de tabela de várias instruções. Para obter mais informações, consulte execução intercalada para funções com valor de tabela de várias instruções. Aplica-se a: SQL Server 2017 (14.x) e versões posteriores e Banco de Dados SQL do Azure |
'DISABLE_OPTIMIZED_NESTED_LOOP' |
Instrui o processador de consulta a não usar uma operação de classificação (classificação em lote) para junções de loop aninhadas otimizadas ao gerar um plano de consulta. Esse nome de dica é equivalente a Sinalizador de Rastreamento 2340. Essa dica também se aplica a classificações explícitas e classificações em lotes. |
'DISABLE_OPTIMIZER_ROWGOAL'
|
Faz com que o SQL Server gere um plano que não use modificações de meta de linha com consultas que contêm estas palavras-chave: - TOP - OPTION (FAST N) - IN - EXISTS Esse nome de dica é equivalente a sinalizador de rastreamento 4138. |
'DISABLE_PARAMETER_SNIFFING' |
Instrui o Otimizador de Consulta a usar a distribuição média de dados ao compilar uma consulta com um ou mais parâmetros. Essa instrução torna o plano de consulta independente no valor do parâmetro usado pela primeira vez quando a consulta foi compilada. Esse nome de dica é equivalente a sinalizador de rastreamento 4136 ou configuração no escopo do banco de dados configuração PARAMETER_SNIFFING = OFF . |
'DISABLE_ROW_MODE_MEMORY_GRANT_FEEDBACK' |
Desabilita os comentários de concessão de memória do modo de linha. Para obter mais informações, consulte comentários de concessão de memória do modo linha. Aplica-se a: SQL Server 2019 (15.x) e versões posteriores e Banco de Dados SQL do Azure |
'DISABLE_TSQL_SCALAR_UDF_INLINING' |
Desabilita o sublinhado escalar da UDF. Para obter mais informações, consulte de inlining da UDF escalar. Aplica-se a: SQL Server 2019 (15.x) e versões posteriores e Banco de Dados SQL do Azure |
'DISALLOW_BATCH_MODE' |
Desabilita a execução do modo de lote. Para obter mais informações, consulte modos de execução. Aplica-se a: SQL Server 2019 (15.x) e versões posteriores e Banco de Dados SQL do Azure |
'ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS' |
Permite estatísticas rápidas geradas automaticamente (alteração de histograma) para qualquer coluna de índice líder para a qual a estimativa de cardinalidade é necessária. O histograma usado para estimar a cardinalidade é ajustado no tempo de compilação da consulta para considerar o valor máximo ou mínimo real desta coluna. Esse nome de dica é equivalente a sinalizador de rastreamento 4139. |
'ENABLE_QUERY_OPTIMIZER_HOTFIXES' |
Habilita os hotfixes do Otimizador de Consulta (alterações lançadas em Atualizações Cumulativas e Service Packs do SQL Server). Esse nome de dica é equivalente a sinalizador de rastreamento 4199 ou configuração no escopo do banco de dados configuração QUERY_OPTIMIZER_HOTFIXES = ON . |
'FORCE_DEFAULT_CARDINALITY_ESTIMATION' |
Força o Otimizador de Consulta a usar modelo de estimativa de cardinalidade que corresponde ao nível de compatibilidade atual do banco de dados. Use essa dica para substituir configuração com escopo de banco de dados configuração LEGACY_CARDINALITY_ESTIMATION = ON ou Sinalizador de Rastreamento 9481. |
'FORCE_LEGACY_CARDINALITY_ESTIMATION'
|
Força o Otimizador de Consulta a usar a Estimativa de Cardinalidade modelo do SQL Server 2012 (11.x) e versões anteriores. Esse nome de dica é equivalente a sinalizador de rastreamento 9481 ou configuração no escopo do banco de dados configuração LEGACY_CARDINALITY_ESTIMATION = ON . |
'QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n'
1 |
Força o comportamento do Otimizador de Consulta em um nível de consulta. Esse comportamento ocorre como se a consulta tivesse sido compilada com o nível de compatibilidade do banco de dados n, em que n é um nível de compatibilidade de banco de dados com suporte. Para obter uma lista de valores com suporte no momento para n, consulte sys.dm_exec_valid_use_hints. aplica-se a: SQL Server 2017 (14.x) 10 e versões posteriores e Banco de Dados SQL do Azure |
'QUERY_PLAN_PROFILE'
2 |
Habilita a criação de perfil leve para a consulta. Quando uma consulta que contém essa nova dica é concluída, um novo evento estendido, query_plan_profile , é acionado. Esse evento estendido expõe estatísticas de execução e XML do plano de execução real semelhantes ao query_post_execution_showplan evento estendido, mas apenas para consultas que contêm a nova dica.aplica-se a: SQL Server 2016 (13.x) SP 2 3, SQL Server 2017 (14.x) 11 e versões posteriores |
1 A dica QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n
não substituirá a configuração de estimativa de cardinalidade padrão ou herdada, se você forçá-la por meio de configuração com escopo de banco de dados, sinalizador de rastreamento ou outra dica de consulta, como QUERYTRACEON
. Essa dica afeta apenas o comportamento do Otimizador de Consulta. Isso não afeta outros recursos do SQL Server que podem depender do nível de compatibilidade do banco de dados , como a disponibilidade de determinados recursos de banco de dados. Para obter mais informações, consulte Developer's Choice: Hinting Query Execution model.
2 Se você habilitar a coleta do evento estendido query_post_execution_showplan
, a infraestrutura de criação de perfil padrão será adicionada a todas as consultas em execução no servidor e, portanto, poderá afetar o desempenho geral do servidor. Se você habilitar a coleção de query_thread_profile
evento estendido para usar a infraestrutura de criação de perfil leve, isso resultará em muito menos sobrecarga de desempenho, mas ainda afetará o desempenho geral do servidor. Se você habilitar o evento estendido query_plan_profile
, isso só habilitará a infraestrutura de criação de perfil leve para uma consulta executada com o query_plan_profile
e, portanto, não afetará outras cargas de trabalho no servidor. Use essa dica para criar o perfil de uma consulta específica sem afetar outras partes da carga de trabalho do servidor. Para obter mais informações sobre criação de perfil leve, consulte de Infraestrutura de Criação de Perfil de Consulta.
A lista de todos os nomes de USE HINT
com suporte pode ser consultada usando a exibição de gerenciamento dinâmico sys.dm_exec_valid_use_hints.
Importante
Algumas dicas de USE HINT
podem entrar em conflito com sinalizadores de rastreamento habilitados no nível global ou de sessão ou configurações com escopo de banco de dados. Nesse caso, a dica de nível de consulta (USE HINT
) sempre tem precedência. Se um USE HINT
entrar em conflito com outra dica de consulta ou um sinalizador de rastreamento habilitado no nível da consulta (como por QUERYTRACEON
), o SQL Server gerará um erro ao tentar executar a consulta.
USE PLAN N'xml_plan'
Força o Otimizador de Consulta a usar um plano de consulta existente para uma consulta especificada por xml_plan.
USE PLAN
não pode ser especificado com instruções INSERT
, UPDATE
, MERGE
ou DELETE
.
O plano de execução resultante forçado por esse recurso é o mesmo ou semelhante ao plano que está sendo forçado. Como o plano resultante pode não ser idêntico ao plano especificado por USE PLAN
, o desempenho dos planos pode variar. Em casos raros, a diferença de desempenho pode ser significativa e negativa; nesse caso, o administrador deve remover o plano forçado.
DICA DE TABELA ( exposed_object_name [ , <table_hint> [ [ , ] ... n ] ] )
Aplica a dica de tabela especificada à tabela ou exibição que corresponde a exposed_object_name. É recomendável usar uma dica de tabela como uma dica de consulta apenas no contexto de um guia de plano.
exposed_object_name pode ser uma das seguintes referências:
Quando um alias é usado para a tabela ou exibição na cláusula FROM da consulta, exposed_object_name é o alias.
Quando um alias não é usado, exposed_object_name é a correspondência exata da tabela ou exibição referenciada na cláusula
FROM
. Por exemplo, se a tabela ou exibição for referenciada usando um nome de duas partes, exposed_object_name será o mesmo nome de duas partes.
Quando você especifica exposed_object_name sem especificar também uma dica de tabela, todos os índices especificados na consulta como parte de uma dica de tabela para o objeto são desconsiderados. Em seguida, o Otimizador de Consulta determina o uso do índice. Você pode usar essa técnica para eliminar o efeito de uma dica de tabela INDEX
quando não é possível modificar a consulta original. Consulte exemplo J.
<table_hint>
NOEXPAND [ , ÍNDICE ( 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 | SERIALIZÁVEL | INSTANTÂNEO | SPATIAL_WINDOW_MAX_CELLS = integer_value | TABLOCK | TABLOCKX | UPDLOCK | XLOCK
A dica de tabela a ser aplicada à tabela ou exibição que corresponde a exposed_object_name como uma dica de consulta. Para obter uma descrição dessas dicas, consulte dicas de tabela.
Dicas de tabela diferentes de INDEX
, FORCESCAN
e FORCESEEK
não são permitidas como dicas de consulta, a menos que a consulta já tenha uma cláusula WITH
especificando a dica de tabela. Para obter mais informações, consulte a seção Comentários .
Cuidado
Especificar FORCESEEK
com parâmetros limita o número de planos que podem ser considerados pelo Otimizador de Consulta mais do que ao especificar FORCESEEK
sem parâmetros. Isso pode fazer com que um erro "Plano não possa ser gerado" ocorra em mais casos.
FOR TIMESTAMP AS OF 'point_in_time'
aplica-se a: Microsoft Fabric Data Warehouse
Use a sintaxe TIMESTAMP
na cláusula OPTION
para consultar dados como eles existiam no passado, parte do recurso de viagem no tempo no Synapse Data Warehouse no Microsoft Fabric.
Especifique o point_in_time no formato yyyy-MM-ddTHH:mm:ss[.fff]
para retornar dados como eles apareceram naquele momento. O fuso horário está sempre em UTC. Use a sintaxe CONVERT
para o formato datetime necessário com estilo 126.
A dica TIMESTAMP AS OF
pode ser especificada apenas uma vez usando a cláusula OPTION
. Para obter mais informações e limitações, consulte dados de consulta como eles existiam noanterior.
FORCE [ NÓ ÚNICO | PLANO DISTRIBUÍDO ]
aplica-se a: Microsoft Fabric Data Warehouse
Permite que o usuário escolha se deseja forçar um único plano de nó ou um plano distribuído para a execução da consulta.
Observações
As dicas de consulta não podem ser especificadas em uma instrução INSERT
, exceto quando uma cláusula SELECT
é usada dentro da instrução.
As dicas de consulta só podem ser especificadas na consulta de nível superior, não em subconsultas. Quando uma dica de tabela é especificada como uma dica de consulta, a dica pode ser especificada na consulta de nível superior ou em uma subconsulta. No entanto, o valor especificado para exposed_object_name na cláusula TABLE HINT
deve corresponder exatamente ao nome exposto na consulta ou subconsulta.
Especificar dicas de tabela como dicas de consulta
É recomendável usar a dica de tabela INDEX
, FORCESCAN
ou FORCESEEK
como uma dica de consulta apenas no contexto de um guia de plano . Guias de plano são úteis quando você não pode modificar a consulta original, por exemplo, porque é um aplicativo de terceiros. A dica de consulta especificada no guia de plano é adicionada à consulta antes de compilar e ser otimizada. Para consultas ad hoc, use a cláusula TABLE HINT
somente ao testar instruções guia do plano. Para todas as outras consultas ad hoc, recomendamos especificar essas dicas apenas como dicas de tabela.
Quando especificado como uma dica de consulta, as dicas de tabela INDEX
, FORCESCAN
e FORCESEEK
são válidas para os seguintes objetos:
- Tabelas
- Visualizações
- Exibições indexadas
- Expressões de tabela comuns (a dica deve ser especificada na instrução
SELECT
cujo conjunto de resultados preenche a expressão de tabela comum) - Visões de Gerenciamento Dinâmico (DMVs)
- Subconsultas nomeadas
Você pode especificar INDEX
, FORCESCAN
e dicas de tabela FORCESEEK
como dicas de consulta para uma consulta que não tem nenhuma dica de tabela existente. Você também pode usá-las para substituir as dicas INDEX
, FORCESCAN
ou FORCESEEK
existentes na consulta, respectivamente.
Dicas de tabela diferentes de INDEX
, FORCESCAN
e FORCESEEK
não são permitidas como dicas de consulta, a menos que a consulta já tenha uma cláusula WITH
especificando a dica de tabela. Nesse caso, uma dica correspondente também deve ser especificada como uma dica de consulta. Especifique a dica de correspondência como uma dica de consulta usando TABLE HINT
na cláusula OPTION
. Essa especificação preserva a semântica da consulta. Por exemplo, se a consulta contiver a dica de tabela NOLOCK
, a cláusula OPTION
no parâmetro @hints do guia de plano também deverá conter a dica NOLOCK
. Consulte exemplo K.
Especificar dicas com dicas do Repositório de Consultas
Você pode impor dicas sobre consultas identificadas por meio do Repositório de Consultas sem fazer alterações de código, usando as dicas do Repositório de Consultas recurso. Use o sys.sp_query_store_set_hints procedimento armazenado para aplicar uma dica a uma consulta. Consulte o exemplo N.
Suporte à dica de consulta no Fabric Data Warehouse
o Microsoft Fabric Data Warehouse dá suporte a um subconjunto de dicas de consulta:
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
Essas dicas de consulta são exclusivas do Microsoft Fabric Data Warehouse:
-
FORCE SINGLE NODE PLAN
,FORCE DISTRIBUTED PLAN
Exemplos
Um. Usar MERGE JOIN
O exemplo a seguir especifica que MERGE JOIN
executa a operação JOIN
na consulta. O exemplo usa o banco de dados 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. Usar OPTIMIZE FOR
O exemplo a seguir instrui o Otimizador de Consulta a usar o valor 'Seattle'
para @city_name
e usar a seletividade média do predicado em todos os valores de coluna para @postal_code
ao otimizar a consulta. O exemplo usa o banco de dados 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. Usar MAXRECURSION
MAXRECURSION
pode ser usado para impedir que uma expressão de tabela comum recursiva mal formada entre em um loop infinito. O exemplo a seguir cria intencionalmente um loop infinito e usa a dica MAXRECURSION
para limitar o número de níveis de recursão a dois. O exemplo usa o banco de dados 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
Depois que o erro de codificação for corrigido, MAXRECURSION
não será mais necessário.
D. Usar MERGE UNION
O exemplo a seguir usa a dica de consulta MERGE UNION
. O exemplo usa o banco de dados AdventureWorks2022
.
SELECT *
FROM HumanResources.Employee AS e1
UNION
SELECT *
FROM HumanResources.Employee AS e2
OPTION (MERGE UNION);
GO
E. Usar o GRUPO DE HASH e o FAST
O exemplo a seguir usa as dicas de consulta HASH GROUP
e FAST
. O exemplo usa o banco de dados 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. Usar MAXDOP
O exemplo a seguir usa a dica de consulta MAXDOP
. O exemplo usa o banco de dados 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. Usar INDEX
Os exemplos a seguir usam a dica INDEX
. O primeiro exemplo especifica um único índice. O segundo exemplo especifica vários índices para uma única referência de tabela. Em ambos os exemplos, como você aplica a dica INDEX
em uma tabela que usa um alias, a cláusula TABLE HINT
também deve especificar o mesmo alias que o nome do objeto exposto. O exemplo usa o banco de dados 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. Usar FORCESEEK
O exemplo a seguir usa a dica de tabela FORCESEEK
. A cláusula TABLE HINT
também deve especificar o mesmo nome de duas partes que o nome do objeto exposto. Especifique o nome ao aplicar a dica INDEX
em uma tabela que usa um nome de duas partes. O exemplo usa o banco de dados 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. Usar várias dicas de tabela
O exemplo a seguir aplica a dica INDEX
a uma tabela e a dica FORCESEEK
a outra. O exemplo usa o banco de dados 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. Usar TABLE HINT para substituir uma dica de tabela existente
O exemplo a seguir mostra como usar a dica TABLE HINT
. Você pode usar a dica sem especificar uma dica para substituir o comportamento da dica de tabela INDEX
especificada na cláusula FROM
da consulta. O exemplo usa o banco de dados 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. Especificar dicas de tabela que afetam a semântica
O exemplo a seguir contém duas dicas de tabela na consulta: NOLOCK
, que afeta semântica e INDEX
, que não afeta a semântica. Para preservar a semântica da consulta, a dica NOLOCK
é especificada na cláusula OPTIONS
do guia de plano. Juntamente com a dica NOLOCK
, especifique as dicas INDEX
e FORCESEEK
e substitua a dica de INDEX
que afeta a semântica na consulta durante a compilação e a otimização da instrução. O exemplo usa o banco de dados 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
O exemplo a seguir mostra um método alternativo para preservar a semântica da consulta e permitir que o otimizador escolha um índice diferente do índice especificado na dica de tabela. Permitir que o otimizador escolha especificando a dica NOLOCK
na cláusula OPTIONS
. Especifique a dica porque ela afeta semântica. Em seguida, especifique a palavra-chave TABLE HINT
com apenas uma referência de tabela e nenhuma dica de INDEX
. O exemplo usa o banco de dados 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. Usar DICA DE USO
O exemplo a seguir usa as dicas de consulta RECOMPILE
e USE HINT
. O exemplo usa o banco de dados 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. Usar DICA QUERYTRACEON
O exemplo a seguir usa as dicas de consulta QUERYTRACEON
. O exemplo usa o banco de dados AdventureWorks2022
. Você pode habilitar todos os hotfixes que afetam o plano controlados pelo sinalizador de rastreamento 4199 para uma consulta específica usando a seguinte consulta:
SELECT * FROM Person.Address
WHERE City = 'SEATTLE' AND PostalCode = 98104
OPTION (QUERYTRACEON 4199);
Você também pode usar vários sinalizadores de rastreamento como na seguinte consulta:
SELECT * FROM Person.Address
WHERE City = 'SEATTLE' AND PostalCode = 98104
OPTION (QUERYTRACEON 4199, QUERYTRACEON 4137);
N. Usar dicas do Repositório de Consultas
O Repositório de Consultas dá dicas recurso no Banco de Dados SQL do Azure fornece um método fácil de usar para moldar planos de consulta sem alterar o código do aplicativo.
Primeiro, identifique a consulta que já foi executada nas exibições do catálogo do Repositório de Consultas, por exemplo:
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
O exemplo a seguir aplica a dica para forçar o estimativa de cardinalidade herdado a query_id 39, identificado no Repositório de Consultas:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(USE HINT(''FORCE_LEGACY_CARDINALITY_ESTIMATION''))';
O exemplo a seguir aplica a dica para impor um tamanho máximo de concessão de memória em PERCENT
do limite de memória configurado para query_id
39, identificado no Repositório de Consultas:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(MAX_GRANT_PERCENT=10)';
O exemplo a seguir aplica várias dicas de consulta ao query_id 39, incluindo RECOMPILE
, MAXDOP 1
e o comportamento do otimizador de consulta do 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. Consultar dados a partir de um ponto no tempo
aplica-se a: Warehouse no Microsoft Fabric
Use a sintaxe TIMESTAMP
na cláusula OPTION
para consultar dados como eles existiam no passado, no Synapse Data Warehouse no Microsoft Fabric. A consulta de exemplo a seguir retorna dados como apareceram em 13 de março de 2024 às 7:39:35.28 PM UTC. O fuso horário está sempre em 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