Sugerencias de consulta (Transact-SQL)
Se aplica a:Sql Server
Azure SQL Database
Azure SQL Instancia administrada punto de conexión de SQL Analytics en Microsoft Fabric
Warehouse en la base de datos SQL de Microsoft Fabric
en Microsoft Fabric
Las sugerencias de consulta especifican que las sugerencias indicadas se usan en el ámbito de una consulta. Afectan a todos los operadores de la instrucción . Si UNION
participa en la consulta principal, solo la última consulta que implica una operación de UNION
puede tener la cláusula OPTION
. Las sugerencias de consulta se especifican como parte de la cláusula OPTION de . El error 8622 se produce si una o varias sugerencias de consulta hacen que el optimizador de consultas no genere un plan válido.
Precaución
Dado que el optimizador de consultas de SQL Server suele seleccionar el mejor plan de ejecución para una consulta, solo se recomienda usar sugerencias como último recurso para desarrolladores experimentados y administradores de bases de datos.
se aplica a:
Convenciones de sintaxis de Transact-SQL
Sintaxis
<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 las agregaciones que describe la cláusula GROUP BY
o DISTINCT
de la consulta deben usar hash o ordenación.
- Por lo general, un algoritmo basado en hash puede mejorar el rendimiento de las consultas que implican conjuntos de agrupación grandes o complejos.
- Por lo general, un algoritmo basado en ordenación puede mejorar el rendimiento de las consultas que implican conjuntos de agrupación pequeños o simples.
{ MERGE | HASH | CONCAT } UNION
Especifica que todas las operaciones de UNION
se ejecutan mediante la combinación, el hash o la concatenación de conjuntos de UNION
. Si se especifica más de una sugerencia de UNION
, el optimizador de consultas selecciona la estrategia menos costosa de esas sugerencias especificadas.
- Por lo general, una operación de algoritmo basada en mezcla puede mejorar el rendimiento de las consultas que implican entradas ordenadas.
- Por lo general, un algoritmo basado en hash puede mejorar el rendimiento de las consultas que implican entradas no ordenadas o grandes.
- Por lo general, un algoritmo basado en concatenación puede mejorar el rendimiento de las consultas que implican entradas distintas o pequeñas.
{ LOOP | MERGE | HASH } JOIN
Especifica que todas las operaciones de combinación se realizan mediante LOOP JOIN
, MERGE JOIN
o HASH JOIN
en toda la consulta. Si especifica más de una sugerencia de combinación, el optimizador selecciona la estrategia de combinación menos costosa de las permitidas.
Si especifica una sugerencia de combinación en la cláusula FROM
de la misma consulta para un par de tabla específico, esta sugerencia de combinación tiene prioridad en la combinación de las dos tablas. Sin embargo, se deben respetar las sugerencias de consulta. La sugerencia de combinación para el par de tablas solo podría restringir la selección de métodos de combinación permitidos en la sugerencia de consulta. Para obtener más información, consulte sugerencias de combinación.
DISABLE_OPTIMIZED_PLAN_FORCING
Se aplica a: SQL Server (a partir de SQL Server 2022 [16.x])
Deshabilita plan optimizado forzar para una consulta.
El forzado de plan optimizado reduce la sobrecarga de compilación causado por la repetición de consultas forzadas. Una vez generado el plan de ejecución de consultas, los pasos de compilación específicos se almacenan para que puedan reutilizarse como un script de reproducción para optimización. Un script de reproducción de optimización se almacena como parte del XML del plan de presentación comprimido en Almacén de consultas, en un atributo OptimizationReplay
oculto.
EXPANDIR VISTAS
Especifica que las vistas indizadas se expanden. Especifica también que el optimizador de consultas no tiene en cuenta ninguna vista indizada como reemplazo de cualquier elemento de consulta. Una vista se expande cuando la definición de vista reemplaza el nombre de la vista en el texto de la consulta.
Esta sugerencia de consulta no permite prácticamente el uso directo de vistas indizadas e índices en vistas indizadas en el plan de consulta.
Nota:
La vista indizada permanece condensada si hay una referencia directa a la vista en la parte SELECT
de la consulta. La vista también permanece condensada si especifica WITH (NOEXPAND)
o WITH (NOEXPAND, INDEX( <index_value> [ , *...n* ] ) )
. Para obtener más información sobre la sugerencia de consulta NOEXPAND
, vea Using NOEXPAND.
La sugerencia solo afecta a las vistas de la parte SELECT
de las instrucciones, incluidas esas vistas en INSERT
, UPDATE
, MERGE
y DELETE
instrucciones .
FAST integer_value
Especifica que la consulta está optimizada para la recuperación rápida del primer integer_value número de filas. Este resultado es un entero no negativo. Después de devolver el primer integer_value número de filas, la consulta continúa la ejecución y genera su conjunto de resultados completo.
FORCE ORDER
Especifica que el orden de combinación indicado por la sintaxis de consulta se conserva durante la optimización de consultas. El uso de FORCE ORDER
no afecta al posible comportamiento de inversión de roles del optimizador de consultas.
FORCE ORDER
conserva el orden de combinación especificado en la consulta, que podría mejorar el rendimiento o la coherencia de las consultas que implican sugerencias o condiciones de combinación complejas.
Nota:
En una instrucción MERGE
, se obtiene acceso a la tabla de origen antes de la tabla de destino como orden de combinación predeterminado, a menos que se especifique la cláusula WHEN SOURCE NOT MATCHED
. Al especificar FORCE ORDER
se conserva este comportamiento predeterminado.
{ FORCE | DISABLE } EXTERNALPUSHDOWN
Forzar o deshabilitar la inserción del cálculo de expresiones aptas en Hadoop. Solo se aplica a las consultas que usan PolyBase. No se inserta en Azure Storage.
{ FORCE | DISABLE } SCALEOUTEXECUTION
Forzar o deshabilitar la ejecución escalada de consultas de PolyBase que usan tablas externas en clústeres de macrodatos de SQL Server 2019. Esta sugerencia solo se respeta mediante una consulta mediante la instancia maestra de un clúster de macrodatos de SQL. El escalado horizontal se produce en el grupo de proceso del clúster de macrodatos.
MANTENER PLAN
Cambia los umbrales de recompilación para las tablas temporales y hace que sean idénticos a los umbrales de las tablas permanentes. El umbral estimado de recompilación inicia una recompilación automática para la consulta cuando se realiza el número estimado de cambios de columna indizada en una tabla mediante la ejecución de una de las siguientes instrucciones:
UPDATE
DELETE
MERGE
INSERT
Al especificar KEEP PLAN
se asegura de que una consulta no se vuelva a compilar con tanta frecuencia cuando hay varias actualizaciones en una tabla.
KEEPFIXED PLAN
Obliga al optimizador de consultas a no volver a compilar una consulta debido a cambios en las estadísticas. Al especificar KEEPFIXED PLAN
se asegura de que una consulta se vuelva a compilar solo si cambia el esquema de las tablas subyacentes o si sp_recompile
se ejecuta en esas tablas.
IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
se aplica a: SQL Server (a partir de SQL Server 2012 (11.x)).
Impide que la consulta use un índice de almacén de columnas optimizado para memoria no agrupada. Si la consulta contiene la sugerencia de consulta para evitar el uso del índice de almacén de columnas y una sugerencia de índice para usar un índice de almacén de columnas, las sugerencias están en conflicto y la consulta devuelve un error.
MAX_GRANT_PERCENT = <numeric_value>
Se aplica a: SQL Server (a partir de SQL Server 2012 (11.x) Service Pack 3, SQL Server 2014 (12.x) Service Pack 2 y Azure SQL Database.
Tamaño máximo de concesión de memoria en PERCENT
del límite de memoria configurado. Se garantiza que la consulta no supere este límite si la consulta se ejecuta en un grupo de recursos definido por el usuario. En este caso, si la consulta no tiene la memoria mínima necesaria, el sistema genera un error. Si una consulta se ejecuta en el grupo de sistemas (valor predeterminado), obtiene como mínimo la memoria necesaria para ejecutarse. El límite real puede ser inferior si la configuración del regulador de recursos es inferior al valor especificado por esta sugerencia. Los valores válidos están comprendidos entre 0,0 y 100,0.
La sugerencia de concesión de memoria no está disponible para la creación de índices o la regeneración de índices.
MIN_GRANT_PERCENT = <numeric_value>
Se aplica a: SQL Server (a partir de SQL Server 2012 (11.x) Service Pack 3, SQL Server 2014 (12.x) Service Pack 2 y Azure SQL Database.
Tamaño mínimo de concesión de memoria en PERCENT
del límite de memoria configurado. Se garantiza que la consulta obtenga MAX(required memory, min grant)
porque se necesita al menos memoria necesaria para iniciar una consulta. Los valores válidos están comprendidos entre 0,0 y 100,0.
La opción de concesión de memoria min_grant_percent invalida la opción sp_configure
(memoria mínima por consulta (KB)) independientemente del tamaño. La sugerencia de concesión de memoria no está disponible para la creación de índices o la regeneración de índices.
<INTEGER_VALUE> MAXDOP
Se aplica a: SQL Server (a partir de SQL Server 2008 (10.0.x)) y Azure SQL Database.
Invalida la opción de configuración grado máximo de paralelismo de sp_configure
. También invalida el regulador de recursos para la consulta que especifica esta opción. La sugerencia de consulta MAXDOP
puede superar el valor configurado con sp_configure
. Si MAXDOP
supera el valor configurado con Resource Governor, el motor de base de datos usa el valor de resource Governor MAXDOP
, descrito en ALTER WORKLOAD GROUP. Todas las reglas semánticas que se usan con el grado máximo de paralelismo opción de configuración se aplican cuando se usa la sugerencia de consulta MAXDOP
. Para obtener más información, vea Configure the max degree of parallelism Server Configuration Option.
Advertencia
Si MAXDOP
se establece en cero, el servidor elige el grado máximo de paralelismo.
<INTEGER_VALUE> MAXRECURSION
Especifica el número máximo de recursiones permitidas para esta consulta. número es un entero positivo entre 0 y 32.767. Cuando se especifica 0, no se aplica ningún límite. Si no se especifica esta opción, el límite predeterminado para el servidor es 100.
Cuando se alcanza el número especificado o predeterminado para MAXRECURSION
límite durante la ejecución de la consulta, la consulta finaliza y se devuelve un error.
Debido a este error, todos los efectos de la instrucción se revierten. Si la instrucción es una instrucción SELECT
, es posible que se devuelvan resultados parciales o ningún resultado. Es posible que los resultados parciales devueltos no incluyan todas las filas en los niveles de recursividad más allá del nivel máximo de recursividad especificado.
Para obtener más información, consulte WITH common_table_expression.
NO_PERFORMANCE_SPOOL
se aplica a: SQL Server (a partir de SQL Server 2016 (13.x)) y Azure SQL Database.
Impide que un operador de cola se agregue a los planes de consulta (excepto los planes cuando se requiere la cola para garantizar la semántica de actualización válida). El operador de cola puede reducir el rendimiento en algunos escenarios. Por ejemplo, la cola de recursos usa tempdb
y tempdb
contención puede producirse si hay muchas consultas simultáneas que se ejecutan con las operaciones de cola.
OPTIMIZE FOR ( @variable_name { UNKNOWN | = <literal_constant> } [ , ... n ] )
Indica al optimizador de consultas que use un valor determinado para una variable local cuando la consulta se compile y optimice. El valor se utiliza solo durante la optimización de la consulta y no durante la ejecución de la misma.
@variable_name
Nombre de una variable local usada en una consulta, a la que se puede asignar un valor para su uso con la sugerencia de consulta
OPTIMIZE FOR
.UNKNOWN
Especifica que el optimizador de consultas usa datos estadísticos en lugar del valor inicial para determinar el valor de una variable local durante la optimización de consultas.
literal_constant
Valor constante literal al que se va a asignar @variable_name para su uso con la sugerencia de consulta
OPTIMIZE FOR
. literal_constant solo se usa durante la optimización de consultas y no como valor de @variable_name durante la ejecución de la consulta. literal_constant puede ser de cualquier tipo de datos del sistema de SQL Server que se pueda expresar como una constante literal. El tipo de datos de literal_constant debe convertirse implícitamente en el tipo de datos que @variable_name referencias en la consulta.
OPTIMIZE FOR puede contrarrestar el comportamiento predeterminado de detección de parámetros del optimizador. Use también OPTIMIZE FOR
al crear guías de plan. Para más información, vea Volver a compilar un procedimiento almacenado.
OPTIMIZAR PARA DESCONOCIDO
Indica al optimizador de consultas que use la selectividad media del predicado en todos los valores de columna, en lugar de usar el valor del parámetro en tiempo de ejecución cuando la consulta se compile y optimice.
Si usa OPTIMIZE FOR @variable_name = <literal_constant>
y OPTIMIZE FOR UNKNOWN
en la misma sugerencia de consulta, el optimizador de consultas usa el literal_constant especificado para un valor específico. El optimizador de consultas usa UNKNOWN para el resto de los valores de variable. Los valores solo se usan durante la optimización de consultas y no durante la ejecución de la consulta.
PARAMETERIZATION { SIMPLE | FORCED }
Especifica las reglas de parametrización que el optimizador de consultas de SQL Server aplica a la consulta cuando se compila.
Importante
La sugerencia de consulta PARAMETERIZATION
solo se puede especificar dentro de una guía de plan para invalidar la configuración actual de la SET
de base de datos de PARAMETERIZATION
. No se puede especificar directamente dentro de una consulta.
Para obtener más información, vea Especificar el comportamiento de parametrización de consulta mediante guías de plan.
SIMPLE
indica al optimizador de consultas que intente una parametrización sencilla.
FORCED
indica al optimizador de consultas que intente la parametrización forzada. Para obtener más información, vea Parametrización forzada en la Guía de arquitectura de procesamiento de consultasy Parametrización simple en la Guía de arquitectura de procesamiento de consultas.
<INTEGER_VALUE> QUERYTRACEON
Esta opción le permite habilitar una marca de seguimiento que afecta al plan solo durante la compilación de una sola consulta. Al igual que otras opciones de nivel de consulta, puede usarla junto con guías de plan para que coincidan con el texto de una consulta que se ejecuta desde cualquier sesión y aplicar automáticamente una marca de seguimiento que afecta al plan cuando se compila esta consulta. La opción QUERYTRACEON
solo se admite para las marcas de seguimiento del optimizador de consultas. Para obtener más información, vea Marcas de seguimiento.
El uso de esta opción no devuelve ningún error o advertencia si se usa un número de marca de seguimiento no admitido. Si la marca de seguimiento especificada no es una que afecta a un plan de ejecución de consultas, la opción se omite silenciosamente.
Para usar más de una marca de seguimiento en una consulta, especifique una QUERYTRACEON
sugerencia para cada número de marca de seguimiento diferente.
RECOMPILAR
Indica al motor de base de datos de SQL Server que genere un nuevo plan temporal para la consulta y descarte inmediatamente ese plan después de que la consulta complete la ejecución. El plan de consulta generado no reemplaza un plan almacenado en caché cuando se ejecuta la misma consulta sin la sugerencia RECOMPILE
. Sin especificar RECOMPILE
, el motor de base de datos almacena en caché los planes de consulta y los reutiliza. Cuando se compilan planes de consulta, la sugerencia de consulta RECOMPILE
usa los valores actuales de las variables locales de la consulta. Si la consulta está dentro de un procedimiento almacenado, los valores actuales pasados a cualquier parámetro.
RECOMPILE
es una alternativa útil para crear un procedimiento almacenado.
RECOMPILE
usa la cláusula WITH RECOMPILE
cuando solo se debe volver a compilar un subconjunto de consultas dentro del procedimiento almacenado, en lugar de todo el procedimiento almacenado. Para más información, vea Volver a compilar un procedimiento almacenado.
RECOMPILE
también resulta útil al crear guías de plan.
PLAN SÓLIDO
Fuerza al optimizador de consultas a probar un plan que funcione para el tamaño máximo de fila potencial, posiblemente a costa del rendimiento. Cuando se procesa la consulta, es posible que las tablas intermedias y los operadores tengan que almacenar y procesar filas más amplias que cualquiera de las filas de entrada cuando se procesa la consulta. Las filas pueden ser tan anchas que, a veces, el operador determinado no puede procesar la fila. Si las filas son tan anchas, el motor de base de datos genera un error durante la ejecución de la consulta. Al usar ROBUST PLAN
, se indica al optimizador de consultas que no tenga en cuenta ningún plan de consulta que pueda encontrarse con este problema.
Si este plan no es posible, el optimizador de consultas devuelve un error en lugar de aplazar la detección de errores a la ejecución de consultas. Las filas pueden contener columnas de longitud variable; el motor de base de datos permite definir filas que tienen un tamaño máximo potencial más allá de la capacidad del motor de base de datos para procesarlas. Por lo general, a pesar del tamaño máximo posible, una aplicación almacena filas que tienen tamaños reales dentro de los límites que el motor de base de datos puede procesar. Si el motor de base de datos encuentra una fila demasiado larga, se devuelve un error de ejecución.
USE HINT ( 'hint_name' )
se aplica a: SQL Server (a partir de SQL Server 2016 (13.x) SP1) y Azure SQL Database.
Proporciona una o varias sugerencias adicionales al procesador de consultas. Las sugerencias adicionales se especifican con un nombre de sugerencia entre comillas simples.
Sugerencia
Los nombres de sugerencia no distinguen mayúsculas de minúsculas.
Se admiten los siguientes nombres de sugerencia:
Indirecta | Descripción |
---|---|
'ASSUME_JOIN_PREDICATE_DEPENDS_ON_FILTERS'
|
Genera un plan de consulta mediante la suposición de contención simple en lugar de la suposición de contención base predeterminada para las combinaciones, en el optimizador de consultas estimación de cardinalidad modelo de SQL Server 2014 (12.x) y versiones posteriores. Este nombre de sugerencia es equivalente a marca de seguimiento 9476. |
'ASSUME_MIN_SELECTIVITY_FOR_FILTER_ESTIMATES'
|
Genera un plan mediante la selectividad mínima al calcular predicados AND para que los filtros tengan en cuenta la correlación completa. Este nombre de sugerencia es equivalente a marca de seguimiento 4137 cuando se usa con el modelo de estimación de cardinalidad de SQL Server 2012 (11.x) y versiones anteriores, y tiene un efecto similar cuando marca de seguimiento 9471 se usa con el modelo de estimación de cardinalidad de SQL Server 2014 (12.x) y versiones posteriores. |
'ASSUME_FULL_INDEPENDENCE_FOR_FILTER_ESTIMATES' |
Genera un plan mediante la selectividad máxima al calcular predicados AND para que los filtros tengan en cuenta la independencia total. Este nombre de sugerencia es el comportamiento predeterminado del modelo de estimación de cardinalidad de SQL Server 2012 (11.x) y versiones anteriores, y equivalente a marca de seguimiento 9472 cuando se usa con el modelo de estimación de cardinalidad de SQL Server 2014 (12.x) y versiones posteriores. Se aplica a: Azure SQL Database |
'ASSUME_PARTIAL_CORRELATION_FOR_FILTER_ESTIMATES' |
Genera un plan que usa la mayor parte de la selectividad al calcular predicados AND para que los filtros tengan en cuenta la correlación parcial. Este nombre de sugerencia es el comportamiento predeterminado del modelo de estimación de cardinalidad de SQL Server 2014 (12.x) y versiones posteriores. Se aplica a: Azure SQL Database |
'DISABLE_BATCH_MODE_ADAPTIVE_JOINS' |
Deshabilita las combinaciones adaptables en modo por lotes. Para obtener más información, consulte combinaciones adaptables en modo Batch. Se aplica a: SQL Server 2017 (14.x) y versiones posteriores, y Azure SQL Database. |
'DISABLE_BATCH_MODE_MEMORY_GRANT_FEEDBACK' |
Deshabilita los comentarios de concesión de memoria del modo por lotes. Para obtener más información, consulte comentarios de concesión de memoria del modo Batch. Se aplica a: SQL Server 2017 (14.x) y versiones posteriores, y Azure SQL Database. |
'DISABLE_DEFERRED_COMPILATION_TV' |
Deshabilita la compilación diferida de variables de tabla. Para obtener más información, consulte Compilación diferida de variables de tabla. Se aplica a: SQL Server 2019 (15.x) y versiones posteriores, y Azure SQL Database. |
'DISABLE_INTERLEAVED_EXECUTION_TVF' |
Deshabilita la ejecución intercalada para funciones con valores de tabla de varias instrucciones. Para obtener más información, vea ejecución intercalada para funciones con valores de tabla de varias instrucciones. Se aplica a: SQL Server 2017 (14.x) y versiones posteriores, y Azure SQL Database. |
'DISABLE_OPTIMIZED_NESTED_LOOP' |
Indica al procesador de consultas que no use una operación de ordenación (ordenación por lotes) para combinaciones de bucle anidadas optimizadas al generar un plan de consulta. Este nombre de sugerencia es equivalente a marca de seguimiento 2340. Esta sugerencia también se aplica a ordenación explícita y ordenación por lotes. |
'DISABLE_OPTIMIZER_ROWGOAL'
|
Hace que SQL Server genere un plan que no use modificaciones de objetivos de fila con consultas que contengan estas palabras clave: - TOP - OPTION (FAST N) - IN - EXISTS Este nombre de sugerencia es equivalente a marca de seguimiento 4138. |
'DISABLE_PARAMETER_SNIFFING' |
Indica al optimizador de consultas que use la distribución de datos promedio mientras compila una consulta con uno o varios parámetros. Esta instrucción hace que el plan de consulta sea independiente del valor del parámetro que se usó por primera vez cuando se compiló la consulta. Este nombre de sugerencia es equivalente a marca de seguimiento 4136 o configuración con ámbito de base de datosPARAMETER_SNIFFING = OFF . |
'DISABLE_ROW_MODE_MEMORY_GRANT_FEEDBACK' |
Deshabilita los comentarios de concesión de memoria del modo de fila. Para obtener más información, consulte comentarios de concesión de memoria del modo de fila. Se aplica a: SQL Server 2019 (15.x) y versiones posteriores, y Azure SQL Database. |
'DISABLE_TSQL_SCALAR_UDF_INLINING' |
Deshabilita la inserción de UDF escalar. Para obtener más información, consulte inserción de UDF escalar. Se aplica a: SQL Server 2019 (15.x) y versiones posteriores, y Azure SQL Database. |
'DISALLOW_BATCH_MODE' |
Deshabilita la ejecución del modo por lotes. Para obtener más información, vea Modos de ejecución. Se aplica a: SQL Server 2019 (15.x) y versiones posteriores, y Azure SQL Database. |
'ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS' |
Habilita estadísticas rápidas generadas automáticamente (modificación del histograma) para cualquier columna de índice inicial para la que se necesite la estimación de cardinalidad. El histograma usado para calcular la cardinalidad se ajusta en tiempo de compilación de consulta para tener en cuenta el valor máximo o mínimo real de esta columna. Este nombre de sugerencia es equivalente a marca de seguimiento 4139. |
'ENABLE_QUERY_OPTIMIZER_HOTFIXES' |
Habilita las revisiones del optimizador de consultas (cambios publicados en actualizaciones acumulativas y Service Packs de SQL Server). Este nombre de sugerencia es equivalente a marca de seguimiento 4199 o configuración con ámbito de base de datosQUERY_OPTIMIZER_HOTFIXES = ON . |
'FORCE_DEFAULT_CARDINALITY_ESTIMATION' |
Fuerza al optimizador de consultas a usar estimación de cardinalidad modelo que corresponde al nivel de compatibilidad de la base de datos actual. Use esta sugerencia para invalidar configuración con ámbito de base de datos LEGACY_CARDINALITY_ESTIMATION = ON o marca de seguimiento 9481. |
'FORCE_LEGACY_CARDINALITY_ESTIMATION'
|
Fuerza al optimizador de consultas a usar estimación de cardinalidad modelo de SQL Server 2012 (11.x) y versiones anteriores. Este nombre de sugerencia es equivalente a marca de seguimiento 9481 o configuración con ámbito de base de datosLEGACY_CARDINALITY_ESTIMATION = ON . |
'QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n'
1 |
Fuerza el comportamiento del optimizador de consultas en un nivel de consulta. Este comportamiento se produce como si la consulta se compilase con el nivel de compatibilidad de la base de datos n, donde n es un nivel de compatibilidad de base de datos compatible. Para obtener una lista de los valores admitidos actualmente para n, vea sys.dm_exec_valid_use_hints. se aplica a: SQL Server 2017 (14.x) CU 10 y versiones posteriores, y Azure SQL Database |
'QUERY_PLAN_PROFILE'
2 |
Habilita la generación de perfiles ligera para la consulta. Cuando finaliza una consulta que contiene esta nueva sugerencia, se desencadena un nuevo evento extendido, query_plan_profile , . Este evento extendido expone estadísticas de ejecución y XML del plan de ejecución real similar al query_post_execution_showplan evento extendido, pero solo para las consultas que contienen la nueva sugerencia.se aplica a: SQL Server 2016 (13.x) SP 2 CU 3, SQL Server 2017 (14.x) CU 11 y versiones posteriores |
1 La sugerencia de QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n
no invalida la configuración de estimación de cardinalidad predeterminada o heredada, si se fuerza a través de la configuración con ámbito de base de datos, la marca de seguimiento u otra sugerencia de consulta, como QUERYTRACEON
. Esta sugerencia solo afecta al comportamiento del optimizador de consultas. No afecta a otras características de SQL Server que pueden depender del nivel de compatibilidad de base de datos , como la disponibilidad de determinadas características de base de datos. Para obtener más información, vea Elección del desarrollador: Modelo de ejecución de consultas de sugerencias.
2 Si habilita la recopilación del evento extendido query_post_execution_showplan
, la infraestructura de generación de perfiles estándar se agrega a todas las consultas que se ejecutan en el servidor y, por tanto, pueden afectar al rendimiento general del servidor. Si habilita la recopilación de query_thread_profile
evento extendido para usar la infraestructura de generación de perfiles ligera en su lugar, esto produce una sobrecarga de rendimiento mucho menor, pero sigue afectando al rendimiento general del servidor. Si habilita la query_plan_profile
evento extendido, esto solo habilita la infraestructura de generación de perfiles ligera para una consulta que se ejecuta con el query_plan_profile
y, por lo tanto, no afecta a otras cargas de trabajo en el servidor. Use esta sugerencia para generar perfiles de una consulta específica sin afectar a otras partes de la carga de trabajo del servidor. Para obtener más información sobre la generación de perfiles ligera, consulte infraestructura de generación de perfiles de consultas.
La lista de todos los nombres de USE HINT
admitidos se puede consultar mediante la vista de administración dinámica sys.dm_exec_valid_use_hints.
Importante
Algunas sugerencias de USE HINT
podrían entrar en conflicto con las marcas de seguimiento habilitadas en el nivel global o de sesión, o en las opciones de configuración con ámbito de base de datos. En este caso, la sugerencia de nivel de consulta (USE HINT
) siempre tiene prioridad. Si un USE HINT
entra en conflicto con otra sugerencia de consulta o una marca de seguimiento habilitada en el nivel de consulta (por ejemplo, por QUERYTRACEON
), SQL Server generará un error al intentar ejecutar la consulta.
USE PLAN N'xml_plan'
Fuerza al optimizador de consultas a usar un plan de consulta existente para una consulta especificada por xml_plan.
USE PLAN
no se pueden especificar con instrucciones INSERT
, UPDATE
, MERGE
o DELETE
.
El plan de ejecución resultante forzado por esta característica es el mismo o similar al que se fuerza el plan. Dado que el plan resultante puede no ser idéntico al plan especificado por USE PLAN
, el rendimiento de los planes puede variar. En raras ocasiones, la diferencia de rendimiento puede ser significativa y negativa; en ese caso, el administrador debe quitar el plan forzado.
TABLE HINT ( exposed_object_name [ , <table_hint> [ [ , ] ... n ] ] )
Aplica la sugerencia de tabla especificada a la tabla o vista que corresponde a exposed_object_name. Se recomienda usar una sugerencia de tabla como una sugerencia de consulta únicamente en el contexto de una guía de plan.
exposed_object_name puede ser una de las siguientes referencias:
Cuando se usa un alias para la tabla o vista de la cláusula FROM de la consulta, exposed_object_name es el alias.
Cuando no se usa un alias, exposed_object_name es la coincidencia exacta de la tabla o vista a la que se hace referencia en la cláusula
FROM
. Por ejemplo, si se hace referencia a la tabla o vista mediante un nombre de dos partes, exposed_object_name es el mismo nombre de dos partes.
Al especificar exposed_object_name sin especificar también una sugerencia de tabla, se omitan los índices que especifique en la consulta como parte de una sugerencia de tabla para el objeto. A continuación, el optimizador de consultas determina el uso del índice. Puede usar esta técnica para eliminar el efecto de una sugerencia de tabla INDEX
cuando no se puede modificar la consulta original. Vea ejemplo de J.
<table_hint>
NOEXPAND [ , INDEX ( index_value [ ,... n ] ) | INDEX = ( index_value ) ] | INDEX ( index_value [ ,... n ] ) | INDEX = ( index_value ) | FORCESEEK [ ( index_value ( index_column_name [,... ] ) ) ] | FORCESCAN | HOLDLOCK | NOLOCK | NOWAIT | PAGLOCK | READCOMMITTED | READCOMMITTEDLOCK | READPAST | READUNCOMMITTED | REPEATABLEREAD | ROWLOCK | SERIALIZABLE | SNAPSHOT | SPATIAL_WINDOW_MAX_CELLS = integer_value | TABLOCK | TABLOCKX | UPDLOCK | XLOCK
Sugerencia de tabla que se va a aplicar a la tabla o vista que corresponde a exposed_object_name como sugerencia de consulta. Para obtener una descripción de estas sugerencias, consulte Sugerencias de tabla.
Las sugerencias de tabla que no sean INDEX
, FORCESCAN
y FORCESEEK
no se permiten como sugerencias de consulta a menos que la consulta ya tenga una cláusula WITH
que especifique la sugerencia de tabla. Para obtener más información, vea la sección comentarios de .
Precaución
Especificar FORCESEEK
con parámetros limita el número de planes que el optimizador de consultas puede considerar más que al especificar FORCESEEK
sin parámetros. Esto puede hacer que se produzca un error de "Plan no se puede generar" en más casos.
PARA TIMESTAMP AS OF 'point_in_time'
se aplica a: Almacenamiento de datos de Microsoft Fabric
Use la sintaxis de TIMESTAMP
en la cláusula OPTION
para consultar los datos tal como existía en el pasado, parte de la característica de viaje en el tiempo de Synapse Data Warehouse en Microsoft Fabric.
Especifique el point_in_time en el formato yyyy-MM-ddTHH:mm:ss[.fff]
para devolver datos tal como aparecía en ese momento. La zona horaria siempre está en UTC. Use la sintaxis de CONVERT
para el formato datetime necesario con estilo 126.
La sugerencia TIMESTAMP AS OF
solo se puede especificar una vez mediante la cláusula OPTION
. Para obtener más información y limitaciones, vea Datos de consulta tal como existían en el pasado.
FORCE [ SINGLE NODE | DISTRIBUTED ] PLAN
se aplica a: Almacenamiento de datos de Microsoft Fabric
Permite al usuario elegir si forzar un plan de nodo único o un plan distribuido para la ejecución de la consulta.
Observaciones
Las sugerencias de consulta no se pueden especificar en una instrucción INSERT
, excepto cuando se usa una cláusula SELECT
dentro de la instrucción .
Las sugerencias de consulta solo se pueden especificar en la consulta de nivel superior, no en subconsultas. Cuando se especifica una sugerencia de tabla como sugerencia de consulta, la sugerencia se puede especificar en la consulta de nivel superior o en una subconsulta. Sin embargo, el valor especificado para exposed_object_name en la cláusula TABLE HINT
debe coincidir exactamente con el nombre expuesto en la consulta o subconsulta.
Especificar sugerencias de tabla como sugerencias de consulta
Se recomienda usar la sugerencia de tabla INDEX
, FORCESCAN
o FORCESEEK
como sugerencia de consulta solo en el contexto de una guía de plan de . Las guías de plan son útiles cuando no se puede modificar la consulta original, por ejemplo, porque es una aplicación de terceros. La sugerencia de consulta especificada en la guía de plan se agrega a la consulta antes de compilarla y está optimizada. Para las consultas ad hoc, use la cláusula TABLE HINT
solo cuando pruebe las instrucciones de la guía de plan. Para todas las demás consultas ad hoc, se recomienda especificar estas sugerencias solo como sugerencias de tabla.
Cuando se especifica como sugerencia de consulta, las sugerencias de tabla INDEX
, FORCESCAN
y FORCESEEK
son válidas para los objetos siguientes:
- Tablas
- Vistas
- Vistas indizadas
- Expresiones de tabla comunes (la sugerencia debe especificarse en la instrucción
SELECT
cuyo conjunto de resultados rellena la expresión de tabla común) - Vistas de administración dinámica (DMVs)
- Subconsultas con nombre
Puede especificar INDEX
, FORCESCAN
y FORCESEEK
sugerencias de tabla como sugerencias de consulta para una consulta que no tenga ninguna sugerencia de tabla existente. También puede usarlos para reemplazar las sugerencias existentes INDEX
, FORCESCAN
o FORCESEEK
en la consulta, respectivamente.
Las sugerencias de tabla que no sean INDEX
, FORCESCAN
y FORCESEEK
no se permiten como sugerencias de consulta a menos que la consulta ya tenga una cláusula WITH
que especifique la sugerencia de tabla. En este caso, también se debe especificar una sugerencia coincidente como sugerencia de consulta. Especifique la sugerencia coincidente como sugerencia de consulta mediante TABLE HINT
en la cláusula OPTION
. Esta especificación conserva la semántica de la consulta. Por ejemplo, si la consulta contiene la sugerencia de tabla NOLOCK
, la cláusula OPTION
del parámetro @hints de la guía de plan también debe contener la sugerencia NOLOCK
. Vea ejemplo de K.
Especificar sugerencias con sugerencias del Almacén de consultas
Puede aplicar sugerencias en las consultas identificadas a través del Almacén de consultas sin realizar cambios en el código mediante la característica sugerencias del Almacén de consultas. Use el sys.sp_query_store_set_hints procedimiento almacenado para aplicar una sugerencia a una consulta. Consulte el ejemplo N.
Compatibilidad con sugerencias de consulta en Fabric Data Warehouse
microsoft Fabric Data Warehouse admite un subconjunto de sugerencias 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 sugerencias de consulta son exclusivas de Microsoft Fabric Data Warehouse:
-
FORCE SINGLE NODE PLAN
,FORCE DISTRIBUTED PLAN
Ejemplos
A. Usar MERGE JOIN
En el ejemplo siguiente se especifica que MERGE JOIN
ejecuta la operación JOIN
en la consulta. En el ejemplo se usa la base de datos 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. Uso de OPTIMIZE FOR
En el ejemplo siguiente se indica al optimizador de consultas que use el valor 'Seattle'
para @city_name
y que use la selectividad media del predicado en todos los valores de columna para @postal_code
al optimizar la consulta. En el ejemplo se usa la base de datos 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. Uso de MAXRECURSION
MAXRECURSION
se puede usar para evitar que una expresión de tabla común recursiva mal formada entre en un bucle infinito. En el ejemplo siguiente se crea intencionadamente un bucle infinito y se usa la sugerencia MAXRECURSION
para limitar el número de niveles de recursividad a dos. En el ejemplo se usa la base de datos 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
Una vez corregido el error de codificación, ya no se requiere MAXRECURSION
.
D. Uso de MERGE UNION
En el ejemplo siguiente se usa la sugerencia de consulta MERGE UNION
. En el ejemplo se usa la base de datos AdventureWorks2022
.
SELECT *
FROM HumanResources.Employee AS e1
UNION
SELECT *
FROM HumanResources.Employee AS e2
OPTION (MERGE UNION);
GO
E. Uso de HASH GROUP y FAST
En el ejemplo siguiente se usan las sugerencias de consulta HASH GROUP
y FAST
. En el ejemplo se usa la base de datos 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. Uso de MAXDOP
En el ejemplo siguiente se usa la sugerencia de consulta MAXDOP
. En el ejemplo se usa la base de datos 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. Uso de INDEX
En los ejemplos siguientes se usa la sugerencia INDEX
. En el primer ejemplo se especifica un único índice. En el segundo ejemplo se especifican varios índices para una sola referencia de tabla. En ambos ejemplos, dado que aplica la sugerencia INDEX
en una tabla que usa un alias, la cláusula TABLE HINT
también debe especificar el mismo alias que el nombre del objeto expuesto. En el ejemplo se usa la base de datos 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. Uso de FORCESEEK
En el ejemplo siguiente se usa la sugerencia de tabla FORCESEEK
. La cláusula TABLE HINT
también debe especificar el mismo nombre de dos partes que el nombre del objeto expuesto. Especifique el nombre al aplicar la sugerencia de INDEX
en una tabla que use un nombre de dos partes. En el ejemplo se usa la base de datos 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. Uso de varias sugerencias de tabla
En el ejemplo siguiente se aplica la sugerencia INDEX
a una tabla y la sugerencia FORCESEEK
a otra. En el ejemplo se usa la base de datos 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 invalidar una sugerencia de tabla existente
En el ejemplo siguiente se muestra cómo usar la sugerencia TABLE HINT
. Puede usar la sugerencia sin especificar una sugerencia para invalidar el comportamiento de sugerencia de tabla de INDEX
que especifique en la cláusula FROM
de la consulta. En el ejemplo se usa la base de datos 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. Especificación de sugerencias de tabla que afectan a la semántica
En el ejemplo siguiente se incluyen dos sugerencias de tabla en la consulta: NOLOCK
, que afecta a la semántica y INDEX
, que no afecta a la semántica. Para conservar la semántica de la consulta, la sugerencia NOLOCK
se especifica en la cláusula OPTIONS
de la guía de plan. Junto con la sugerencia de NOLOCK
, especifique las sugerencias INDEX
y FORCESEEK
y reemplace la sugerencia INDEX
no semántica que afecta a la consulta durante la compilación y optimización de instrucciones. En el ejemplo se usa la base de datos 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
En el ejemplo siguiente se muestra un método alternativo para conservar la semántica de la consulta y permitir que el optimizador elija un índice distinto del índice especificado en la sugerencia de tabla. Permita que el optimizador elija especificando la sugerencia NOLOCK
en la cláusula OPTIONS
. Especifique la sugerencia porque afecta a la semántica. A continuación, especifique la palabra clave TABLE HINT
con solo una referencia de tabla y ninguna sugerencia INDEX
. En el ejemplo se usa la base de datos 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 SUGERENCIA DE USO
En el ejemplo siguiente se usan las sugerencias de consulta RECOMPILE
y USE HINT
. En el ejemplo se usa la base de datos 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 QUERYTRACEON HINT
En el ejemplo siguiente se usan las sugerencias de consulta QUERYTRACEON
. En el ejemplo se usa la base de datos AdventureWorks2022
. Puede habilitar todas las revisiones que afectan al plan controladas por la marca de seguimiento 4199 para una consulta determinada mediante la consulta siguiente:
SELECT * FROM Person.Address
WHERE City = 'SEATTLE' AND PostalCode = 98104
OPTION (QUERYTRACEON 4199);
También puede usar varias marcas de seguimiento como en la consulta siguiente:
SELECT * FROM Person.Address
WHERE City = 'SEATTLE' AND PostalCode = 98104
OPTION (QUERYTRACEON 4199, QUERYTRACEON 4137);
N. Uso de sugerencias del Almacén de consultas
La característica Almacén de consultas de Azure SQL Database proporciona un método fácil de usar para dar forma a los planes de consulta sin cambiar el código de la aplicación.
En primer lugar, identifique la consulta que ya se ha ejecutado en las vistas de catálogo del Almacén de consultas, por ejemplo:
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
En el ejemplo siguiente se aplica la sugerencia para forzar al estimado r de cardinalidad heredada a query_id 39, identificado en el Almacén de consultas:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(USE HINT(''FORCE_LEGACY_CARDINALITY_ESTIMATION''))';
En el ejemplo siguiente se aplica la sugerencia para aplicar un tamaño máximo de concesión de memoria en PERCENT
del límite de memoria configurado a query_id
39, identificado en el Almacén de consultas:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(MAX_GRANT_PERCENT=10)';
En el ejemplo siguiente se aplican varias sugerencias de consulta a query_id 39, incluido RECOMPILE
, MAXDOP 1
y el comportamiento del optimizador de consultas de 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. Consulta de datos a partir de un momento dado
se aplica a: Almacenamiento en Microsoft Fabric
Use la sintaxis TIMESTAMP
de la cláusula OPTION
para consultar los datos tal como existían en el pasado, en Synapse Data Warehouse en Microsoft Fabric. La siguiente consulta de ejemplo devuelve datos tal como aparecía el 13 de marzo de 2024 a las 7:39:35.28 UTC. La zona horaria siempre está en 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