Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
ponto de extremidade de análise 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 declaração. Se UNION
estiver envolvido na consulta principal, somente a última consulta envolvendo uma operação UNION
pode 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 fizerem com que o Otimizador de Consultas não gere um plano válido.
Atenção
Como o Otimizador de Consultas do SQL Server normalmente seleciona o melhor plano de execução para uma consulta, recomendamos usar apenas dicas como último recurso para desenvolvedores e administradores de banco de dados experientes.
Aplica-se a:
Transact-SQL convenções de sintaxe
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 ( '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
}
Argumentos
{ HASH | ORDEM } GRUPO
Especifica que as agregações descritas pela cláusula GROUP BY
ou DISTINCT
da consulta devem usar hash ou ordenação.
- Geralmente, 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.
{ MESCLAR | HASH | CONCAT } UNIÃO
Especifica que todas as operações UNION
são executadas mesclando, hashing ou concatenando conjuntos UNION
. Se mais de uma dica UNION
for especificada, o Otimizador de Consultas 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.
- Geralmente, um algoritmo baseado em hash pode melhorar o desempenho de consultas que envolvem entradas grandes ou não classificadas.
- Geralmente, um algoritmo baseado em concatenação pode melhorar o desempenho de consultas que envolvem entradas distintas ou pequenas.
{ LOOP | FUNDIR | HASH } ADERIR
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 tabelas 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 honradas. 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 ingresso.
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.
O esforço de plano otimizado reduz a sobrecarga de compilação para a repetição de consultas forçadas. Depois que o plano de execução da consulta é gerado, etapas específicas de compilação são armazenadas para reutilização como um script de repetição de otimização. Um script de repetição de otimização é armazenado como parte do XML de plano de execução compactado em Query Store, em um atributo OptimizationReplay
oculto.
EXPANDIR VISUALIZAÇÕES
Especifica que os modos de exibição indexados são expandidos. Também especifica que o Otimizador de Consulta não considera nenhum modo de exibição indexado como um substituto para qualquer parte da consulta. Um modo de exibição é expandido quando a definição de modo de exibição substitui o nome do modo de exibição no texto da consulta.
Essa dica de consulta praticamente não permite o uso direto de modos de exibição indexados e índices em modos de exibição indexados no plano de consulta.
Observação
O modo de exibição indexado permanecerá condensado se houver uma referência direta ao modo de 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 NOEXPAND.
A dica afeta apenas os pontos de vista na parte SELECT
das declarações, incluindo os pontos de vista em INSERT
, UPDATE
, MERGE
e DELETE
declarações.
FAST integer_value
Especifica que a consulta é otimizada para recuperação rápida do primeiro integer_value número de linhas. Este resultado é um número inteiro não negativo. Depois que o primeiro número integer_value 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 de consulta é preservada durante a otimização da consulta. O uso do FORCE ORDER
não afeta o possível comportamento de inversão de função 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 de junção complexas ou dicas.
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.
{ FORÇA | DESATIVAR } EXTERNALPUSHDOWN
Forçar ou desativar o pushdown do cálculo de expressões qualificadas no Hadoop. Aplica-se apenas a consultas que usam PolyBase. Não empurra para baixo para o armazenamento do Azure.
{ FORÇA | DESATIVAR } SCALEOUTEXECUTION
Forçar ou desabilitar a execução em expansão de consultas PolyBase que estão usando tabelas externas em Clusters de Big Data do SQL Server 2019. Essa dica só é honrada por uma consulta usando a instância mestra de um cluster de Big Data SQL. A expansão ocorre em todo o pool de computação do cluster de big data.
MANTER O PLANO
Altera os limites de recompilação para tabelas temporárias e os torna idênticos aos limites para tabelas permanentes. O limite de recompilação estimado inicia uma recompilação automática para a consulta quando o número estimado de alterações de coluna indexada é 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 seja recompilada somente se o esquema das tabelas subjacentes for alterado ou se sp_recompile
for executado nessas tabelas.
IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
Aplica-se ao: SQL Server (a partir do SQL Server 2012 (11.x)).
Impede que a consulta use um índice columnstore otimizado para memória não clusterizada. 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 (começando com 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. É garantido que a consulta não excederá esse limite se estiver sendo executada 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 sendo executada no pool do sistema (padrão), ela obterá no mínimo a memória necessária para ser executada. O limite real pode ser menor se a configuração do Administrador de Recursos for menor do que o valor especificado por esta 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 ou reconstrução de índice.
MIN_GRANT_PERCENT = <numeric_value>
Aplica-se a: SQL Server (começando com 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 é garantida para 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 ou reconstrução de índice.
MAXDOP <integer_value>
Aplica-se a: SQL Server (começando com o SQL Server 2008 (10.0.x)) e 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 Administrador de Recursos, o Mecanismo de Banco de Dados usará o valor MAXDOP
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, consulte Configurar o grau máximo de paralelismo Opção de configuração do servidor.
Advertência
Se MAXDOP
estiver definido como zero, o servidor escolhe o grau máximo de paralelismo.
MAXRECURION <integer_value>
Especifica o número máximo de recursões permitidas para esta 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 retorna.
Devido a esse erro, todos os efeitos da instrução são revertidos. Se a instrução for uma instrução SELECT
, resultados parciais ou nenhum resultado pode ser retornado. 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 COM common_table_expression.
NO_PERFORMANCE_SPOOL
Aplica-se a: SQL Server (a partir do SQL Server 2016 (13.x)) e Banco de Dados SQL do Azure.
Impede que um operador de spool seja adicionado a planos de consulta (exceto para os planos, quando o spool é necessário para garantir 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.
OTIMIZAR PARA ( @variable_name { DESCONHECIDO | = <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 a execução da consulta.
@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 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 de 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 SQL Server que possa ser expresso como uma constante literal. O tipo de dados de literal_constant deve ser implicitamente convertível para o tipo de dados que @variable_name referências na consulta.
OTIMIZE FOR pode neutralizar o comportamento de deteção de parâmetros padrão do otimizador. Use também OPTIMIZE FOR
ao criar guias de plano. Para obter mais informações, consulte Recompilar um procedimento armazenado.
OTIMIZAR PARA DESCONHECIDOS
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 tempo de execução 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áveis. Os valores são usados somente durante a otimização da consulta, e não durante a execução da consulta.
PARAMETRIZAÇÃO { SIMPLES | FORÇADO }
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 PARAMETERIZATION
banco de dados SET
. Ele não pode ser especificado diretamente em uma consulta.
Para obter mais informações, consulte Especificar o comportamento de parametrização da consulta usando guias de plano.
SIMPLE
instrui o Otimizador de Consultas a tentar uma parametrização simples.
FORCED
instrui o Otimizador de Consulta a tentar parametrização forçada. Para obter mais informações, consulte parametrização forçada no Guia de arquitetura de processamento de consultase Parametrização simples no Guia de arquitetura de processamento de consultas.
QUERYTRACEON <integer_value>
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á-lo 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ó é suportada para sinalizadores de rastreamento do Otimizador de Consulta. Para obter mais informações, consulte Rastrear sinalizadores.
O uso dessa opção não retornará nenhum erro ou aviso se um número de sinalizador de rastreamento não suportado for usado. Se o sinalizador de rastreamento especificado não for um que afete 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 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 quaisquer variáveis locais na consulta. Se a consulta estiver dentro de um procedimento armazenado, os valores atuais serão passados para quaisquer parâmetros.
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, consulte Recompilar um procedimento armazenado.
RECOMPILE
também é útil quando você cria guias de plano.
PLANO ROBUSTO
Força o Otimizador de Consulta a tentar um plano que funcione para o tamanho máximo potencial da linha, possivelmente às custas do desempenho. Quando a consulta é processada, as tabelas e operadores intermediários podem ter que armazenar e processar linhas que são mais largas 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 Consulta a não considerar quaisquer planos de consulta que possam ter esse problema.
Se esse plano não for possível, o Otimizador de Consultas retornará um erro em vez de adiar a deteçã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 definir linhas que têm um tamanho potencial máximo além da capacidade do Mecanismo de Banco de Dados de processá-las. Geralmente, apesar do tamanho potencial máximo, 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 DICA ( 'hint_name' )
Aplica-se a: SQL Server (a partir do SQL Server 2016 (13.x) SP1), Banco de Dados SQL do Azure e Instância Gerenciada SQL do Azure.
Fornece uma ou mais dicas extras para o processador de consultas. As dicas extras são especificadas com o nome da dica entre aspas simples.
Sugestão
Os nomes das dicas não diferenciam maiúsculas de minúsculas.
Os seguintes nomes de dica são suportados:
Sugestão | Descrição |
---|---|
'ABORT_QUERY_EXECUTION'
|
Bloqueia a execução da consulta. Destina-se a ser usado como uma dica do Repositório de Consultas para permitir que os administradores bloqueiem a execução futura de consultas problemáticas conhecidas, por exemplo, consultas não essenciais que afetam as cargas de trabalho do aplicativo. Para obter mais informações, consulte Bloquear a execução futura de consultas problemáticas. Aplica-se a: Banco de Dados SQL do Azure e SQL Server 2025 (17.x) Preview. Esta dica está em pré-visualização. |
'ASSUME_FIXED_MIN_SELECTIVITY_FOR_REGEXP' |
O modelo de Estimativa de Cardinalidade para REGEXP_LIKE fornece valores de seletividade padrão. Use esta dica se a estimativa padrão for muito alta. Ele define a seletividade para um valor fixo de seletividade inferior. Aplica-se a: SQL Server 2025 (17.x) Preview e versões posteriores e Banco de Dados SQL do Azure |
'ASSUME_FIXED_MAX_SELECTIVITY_FOR_REGEXP' |
O modelo de Estimativa de Cardinalidade para REGEXP_LIKE fornece valores de seletividade padrão. Use esta dica se a estimativa padrão for muito baixa. Ele define a seletividade para um valor fixo de maior seletividade. Aplica-se a: SQL Server 2025 (17.x) Preview e versões posteriores e Banco de Dados SQL do Azure |
'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 de Base padrão para junções, no modelo de de Otimização de Consulta Estimativa de Cardinalidade do SQL Server 2014 (12.x) e versões posteriores. Esse nome de dica é equivalente a Trace Flag 9476. |
'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES'
|
Gera um plano usando seletividade mínima ao estimar predicados E para filtros para levar em conta 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 seletividade máxima ao estimar predicados E para filtros para levar em conta a 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. se aplica ao: Banco de Dados SQL do Azure |
'ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES' |
Gera um plano usando a maior ou menor seletividade ao estimar predicados E para filtros para levar em conta 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. se aplica ao: Banco de Dados SQL do Azure |
'DISABLE_BATCH_MODE_ADAPTIVE_JOINS' |
Desabilita as junções adaptáveis do modo de lote. Para obter mais informações, consulte de junções adaptáveis do modo de 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 o feedback de concessão de memória em modo de lote. Para obter mais informações, consulte Memória de concessão de feedback do modo de 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 obter mais informações, consulte Compilação adiada da variável 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_HALLOWEEN_PROTECTION' |
Desabilita a proteção otimizada contra o Dia das Bruxas. Para obter mais informações, consulte Proteção otimizada contra o Dia das Bruxas Aplica-se a: SQL Server 2025 (17.x) Preview |
'DISABLE_OPTIMIZED_NESTED_LOOP' |
Instrui o processador de consultas a não usar uma operação de classificação (batch sort) para uniões de loop aninhadas otimizadas ao gerar um plano de consulta. Esse nome de dica é equivalente a Trace Flag 2340. Essa dica também se aplica a classificações explícitas e classificações em lote. |
'DISABLE_OPTIMIZER_ROWGOAL'
|
Faz com que o SQL Server gere um plano que não usa 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 Trace Flag 4138. |
'DISABLE_PARAMETER_SNIFFING' |
Instrui o Otimizador de Consultas a usar a distribuição média de dados ao compilar uma consulta com um ou mais parâmetros. Esta instrução torna o plano de consulta independente do valor do parâmetro que foi usado pela primeira vez quando a consulta foi compilada. Esse nome de dica é equivalente a Sinalizador de Rastreamento 4136 ou configuração de escopo de banco de dados configuração PARAMETER_SNIFFING = OFF . |
'DISABLE_ROW_MODE_MEMORY_GRANT_FEEDBACK' |
Desativa a memória do modo de linha conceder feedback. Para obter mais informações, consulte Memória de concessão de feedback do modo de 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' |
Desativa o revestimento escalar UDF. Para obter mais informações, consulte Scalar UDF Inlining. 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 (emenda de histograma) para qualquer coluna de índice principal 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 levar em conta o valor máximo ou mínimo real desta coluna. Esse nome de dica é equivalente a Trace Flag 4139. |
'ENABLE_OPTIMIZED_HALLOWEEN_PROTECTION' |
Permite uma proteção otimizada contra o Dia das Bruxas. Para obter mais informações, consulte Proteção otimizada contra o Dia das Bruxas. Aplica-se a: SQL Server 2025 (17.x) Preview |
'ENABLE_QUERY_OPTIMIZER_HOTFIXES' |
Habilita 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 de configuração com escopo de banco de dados configuração QUERY_OPTIMIZER_HOTFIXES = ON . |
'FORCE_DEFAULT_CARDINALITY_ESTIMATION' |
Força o Otimizador de Consulta a usar modelo de de Estimativa de Cardinalidade que corresponda ao nível de compatibilidade de banco de dados atual. Use esta 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 modelo de de Estimativa de Cardinalidade do SQL Server 2012 (11.x) e versões anteriores. Esse nome de dica é equivalente a Sinalizador de Rastreamento 9481 ou configuração de de configuração com escopo de banco de dados 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 acontece como se a consulta fosse compilada com o nível de compatibilidade do banco de dados n, onde n é um nível de compatibilidade de banco de dados suportado. Para obter uma lista dos valores atualmente suportados para n, consulte sys.dm_exec_valid_use_hints. Aplica-se ao: SQL Server 2017 (14.x) 10 e versões posteriores e Banco de Dados SQL do Azure |
'QUERY_PLAN_PROFILE'
2 |
Permite 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 semelhante ao evento estendido query_post_execution_showplan , 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 de QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n
não substitui a configuração de estimativa de cardinalidade padrão ou herdada, se você forçá-la por meio da configuração do escopo do banco de dados, do sinalizador de rastreamento ou de 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 query_post_execution_showplan
evento estendido, a infraestrutura de criação de perfil padrão será adicionada a cada consulta em execução no servidor e, portanto, poderá afetar o desempenho geral do servidor. Se você habilitar a coleta de query_thread_profile
evento estendido para usar uma 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 query_plan_profile
estendido, isso habilitará apenas 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 esta 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 Query Profiling Infrastructure.
A lista de todos os nomes de USE HINT
suportados pode ser consultada usando o modo de exibição de gerenciamento dinâmico sys.dm_exec_valid_use_hints.
Importante
Algumas dicas USE HINT
podem entrar em conflito com sinalizadores de rastreamento habilitados no nível global ou de sessão ou com definições de configuração 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 de consulta (como por QUERYTRACEON
), o SQL Server gerará um erro ao tentar executar a consulta.
USE O PLANO 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 INSERT
, UPDATE
, MERGE
ou DELETE
instruções.
O plano de execução resultante forçado por este 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. Recomendamos usar uma dica de tabela como uma dica de consulta somente no contexto de um guia de plano de .
exposed_object_name pode ser uma das seguintes referências:
Quando um alias é usado para a tabela ou exibição no FROM cláusula 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 Consultas determina o uso do índice. Você pode usar essa técnica para eliminar o efeito de uma dica de tabela INDEX
quando não for possível modificar a consulta original. Ver exemplo J.
<table_hint>
NOEXPAND [ , ÍNDICE ( index_value [ ,... n ] ) | ÍNDICE = ( index_value ) ] | ÍNDICE ( index_value [ ,... n ] ) | ÍNDICE = ( index_value ) | FORCESEEK [ ( index_value ( index_column_name [,... ] ) ) | FORCESCAN | BLOQUEIO | NOLOCK | NOWAIT | PAGLOCK - Brasil | READCOMMITTED | READCOMMITTEDLOCK | LEIADO | READUNCOMMITTED | REPETÍVELLER | 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 .
Atenção
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 "O plano não pode ser gerado" ocorra em mais casos.
PARA CARIMBO DE DATA/HORA A PARTIR DE 'point_in_time'
se aplica a: Microsoft Fabric Data Warehouse
Use a sintaxe TIMESTAMP
na cláusula OPTION
para consultar dados como 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 os 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 Consultar dados tal como existiam no passado.
FORCE [ NÓ ÚNICO | DISTRIBUÍDO ] PLANO
se aplica a: Microsoft Fabric Data Warehouse
Permite que o usuário escolha se deseja forçar um plano de nó único 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 podem ser especificadas somente 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
Recomendamos usar a dica de tabela INDEX
, FORCESCAN
ou FORCESEEK
como uma dica de consulta somente no contexto de um guia de plano de . Os guias de planejamento 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 ser compilada e otimizada. Para consultas ad hoc, use a cláusula TABLE HINT
somente ao testar instruções de guia do plano. Para todas as outras consultas ad hoc, recomendamos especificar essas dicas apenas como dicas de tabela.
Quando especificadas como uma dica de consulta, as dicas de tabela INDEX
, FORCESCAN
e FORCESEEK
são válidas para os seguintes objetos:
- Tabelas
- Visualizações
- Visualizaçõ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) - Visualizações de gerenciamento dinâmico (DMVs)
- Subconsultas nomeadas
Você pode especificar INDEX
, FORCESCAN
e FORCESEEK
dicas de tabela como dicas de consulta para uma consulta que não tenha nenhuma dica de tabela existente. Você também pode usá-los para substituir INDEX
existentes, FORCESCAN
ou FORCESEEK
dicas 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 correspondente como uma dica de consulta usando TABLE HINT
na cláusula OPTION
. Esta 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
. Ver Exemplo K.
Especificar dicas com dicas do Repositório de Consultas
Você pode impor dicas em consultas identificadas por meio do Repositório de Consultas sem fazer alterações de código, usando o recurso dicas do Repositório de Consultas. Use o procedimento armazenado sys.sp_query_store_set_hints para aplicar uma dica a uma consulta. Ver Exemplo N.
Suporte a dicas de consulta no Fabric Data Warehouse
Microsoft Fabric Data Warehouse oferece 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
Estas 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. Use OTIMIZE FOR
O exemplo a seguir instrui o Otimizador de Consulta a usar o valor 'Seattle'
para @city_name
e a 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 evitar 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 é corrigido, MAXRECURSION
não é 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. Use HASH GROUP e 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 de 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. Use 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 de 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
Eu. Use 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. Use TABLE HINT para substituir uma dica de tabela existente
O exemplo a seguir mostra como usar a dica de TABLE HINT
. Você pode usar a dica sem especificar uma dica para substituir o comportamento de dica de tabela INDEX
especificado 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 a semântica, e INDEX
, que não afeta a semântica. Para preservar a semântica da consulta, a dica de NOLOCK
é especificada na cláusula OPTIONS
do guia de plano. Junto com a dica NOLOCK
, especifique as dicas INDEX
e FORCESEEK
e substitua a dica INDEX
que não afeta a semântica na consulta durante a compilação e 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. Permita que o otimizador escolha especificando a dica NOLOCK
na cláusula OPTIONS
. Você especifica a dica porque ela afeta a semântica. Em seguida, especifique a palavra-chave TABLE HINT
com apenas uma referência de tabela e nenhuma dica 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. Use USE HINT
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. Use QUERYTRACEON HINT
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 consulta a seguir:
SELECT * FROM Person.Address
WHERE City = 'SEATTLE' AND PostalCode = 98104
OPTION (QUERYTRACEON 4199, QUERYTRACEON 4137);
N. Usar dicas do Repositório de Consultas
O recurso de dicas do Repositório de Consultas 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 de 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 do estimador de cardinalidade herdado ao 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 exemplo a seguir bloqueia a consulta com o query_id 39 da execução futura aplicando a ABORT_QUERY_EXECUTION
dica. A dica está em pré-visualização.
EXEC sys.sp_query_store_set_hints @query_id = 39,
@query_hints = N'OPTION (USE HINT (''ABORT_QUERY_EXECUTION''))';
O. Consultar dados a partir de um point-in-time
se aplica ao: Warehouse no Microsoft Fabric
Use a sintaxe TIMESTAMP
na cláusula OPTION
para consultar dados como 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 19:39:35.28 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