sys.dm_db_missing_index_group_stats_query (Transact-SQL)

Se aplica a: SQL Server 2019 (15.x) Azure SQL DatabaseAzure SQL Managed Instance

Devuelve información sobre las consultas que necesitaban un índice que faltaba de grupos de índices que faltan, excepto los índices espaciales. Se puede devolver más de una consulta por grupo de índices que falta. Un grupo de índices que falta puede tener varias consultas que necesitaban el mismo índice.

En Azure SQL Base de datos, las vistas de administración dinámica no pueden exponer información que afectaría a la contención de la base de datos ni exponería información sobre otras bases de datos a las que el usuario tiene acceso. Para evitar exponer esta información, se filtran todas las filas que contienen datos que no pertenecen al inquilino conectado.

Nombre de la columna Tipo de datos Descripción
group_handle int Identifica un grupo de índices que faltan. Este identificador es único en todo el servidor.

Las otras columnas proporcionan información sobre todas las consultas para las que se considera que falta el índice del grupo.

Un grupo de índices solo contiene un índice.

Se puede unir a index_group_handle en sys.dm_db_missing_index_groups.
query_hash binary(8) Valor hash binario que se calcula en la consulta y que se usa para identificar consultas con una lógica similar. Puede usar el hash de consulta para determinar el uso de recursos agregados para las consultas que solo se diferencian en los valores literales.
query_plan_hash binary(8) Valor hash binario que se calcula en el plan de ejecución de consulta y que se usa para identificar planes de ejecución de consulta similares. Puede usar el hash del plan de consulta para buscar el costo acumulativo de las consultas con planes de ejecución similares.

Será siempre 0x000 cuando un procedimiento almacenado nativo consulte una tabla optimizada para memoria.
last_sql_handle varbinary(64) Es un token que identifica de forma única el lote o procedimiento almacenado de la última instrucción compilada que necesitaba este índice.

last_sql_handle se puede usar para recuperar el texto SQL de la consulta mediante una llamada a la función de administración dinámica sys.dm_exec_sql_text.
last_statement_start_offset int Indica, en bytes, a partir de 0, la posición inicial de la consulta que describe la fila dentro del texto de su lote o objeto persistente para la última instrucción compilada que necesitaba este índice en su lote de SQL.
last_statement_end_offset int Indica, en bytes, a partir de 0, la posición final de la consulta que describe la fila dentro del texto de su lote o objeto persistente para la última instrucción compilada que necesitaba este índice en su lote de SQL.
last_statement_sql_handle varbinary(64) Es un token que identifica de forma única el lote o procedimiento almacenado de la última instrucción compilada que necesitaba este índice. Usado por Almacén de consultas. A diferencia last_sql_handlede , sys.query_store_query_text hace referencia al objeto statement_sql_handle utilizado por la vista de catálogo de Almacén de consultas sys.query_store_query_text.

Si Almacén de consultas no se ha habilitado cuando se compiló la consulta, devuelve 0.
user_seeks bigint Número de búsquedas iniciadas por consultas de usuario para las que se podría haber utilizado el índice recomendado del grupo.
user_scans bigint Número de recorridos iniciados por consultas de usuario para los que se podría haber utilizado el índice recomendado del grupo.
last_user_seek datetime Fecha y hora de la última búsqueda iniciada por consultas de usuario para la que se podría haber utilizado el índice recomendado del grupo.
last_user_scan datetime Fecha y hora del último recorrido iniciado por consultas de usuario para el que se podría haber utilizado el índice recomendado del grupo.
avg_total_user_cost float Costo medio de las consultas de usuario que podría reducirse mediante el índice del grupo.
avg_user_impact float Beneficio porcentual medio que podrían obtener las consultas de usuario si se implementara este grupo de índices que faltan. El valor significa que el costo de las consultas se reduciría este porcentaje como promedio si se implementara este grupo de índices que faltan.
system_seeks bigint Número de búsquedas iniciadas por consultas del sistema, como consultas de estadísticas automáticas, para las que se podría haber utilizado el índice recomendado del grupo. Para obtener más información, vea Auto Stats Event Class.
system_scans bigint Número de recorridos iniciados por consultas del sistema para los que se podría haber utilizado el índice recomendado del grupo.
last_system_seek datetime Fecha y hora de la última búsqueda en el sistema iniciada por consultas del sistema para la que se podría haber utilizado el índice recomendado del grupo.
last_system_scan datetime Fecha y hora del último recorrido en el sistema iniciado por consultas del sistema para el que se podría haber utilizado el índice recomendado del grupo.
avg_total_system_cost float Costo medio de las consultas del sistema que podría reducirse mediante el índice del grupo.
avg_system_impact float Beneficio porcentual medio que podrían obtener las consultas del sistema si se implementara este grupo de índices que faltan. El valor significa que el costo de las consultas se reduciría este porcentaje como promedio si se implementara este grupo de índices que faltan.

Observaciones

Cada ejecución de consulta actualiza la información devuelta sys.dm_db_missing_index_group_stats_query por, no por cada compilación de consulta o recompilación. Las estadísticas de uso no se conservan y solo se conservan hasta que se reinicia el motor de base de datos.

Los administradores de bases de datos deben realizar periódicamente una copia de seguridad de la información de los índices que faltan si desean conservar las estadísticas de uso después del reciclaje del servidor. Use la columna sqlserver_start_time en sys.dm_os_sys_info para encontrar la hora del último inicio del motor de base de datos. También puede conservar los índices que faltan con Almacén de consultas.

Nota

El conjunto de resultados de esta DMV está limitado a 600 filas. Cada fila contiene un índice que falta. Si tiene más de 600 índices que faltan, debe abordar los índices que faltan existentes para que pueda ver los más recientes.

Permisos

Para consultar esta vista de administración dinámica, se debe conceder a los usuarios el permiso VIEW SERVER STATE o cualquier permiso que implique el permiso VIEW SERVER STATE.

Permisos para SQL Server 2022 y versiones posteriores

Requiere el permiso VIEW SERVER PERFORMANCE STATE en el servidor.

Ejemplos

En los ejemplos siguientes se muestra cómo usar la sys.dm_db_missing_index_group_stats_query vista de administración dinámica.

A. Busque el texto de la consulta más reciente para las 10 mejoras previstas más altas para las consultas de usuario.

La consulta siguiente devuelve el último texto de consulta registrado para los 10 índices que faltan que generarían la mejora acumulativa prevista más alta, en orden descendente.

SELECT TOP 10 
    SUBSTRING
    (
            sql_text.text,
            misq.last_statement_start_offset / 2 + 1,
            (
            CASE misq.last_statement_start_offset
                WHEN -1 THEN DATALENGTH(sql_text.text)
                ELSE misq.last_statement_end_offset
            END - misq.last_statement_start_offset
            ) / 2 + 1
    ),
    misq.*
FROM sys.dm_db_missing_index_group_stats_query AS misq
CROSS APPLY sys.dm_exec_sql_text(misq.last_sql_handle) AS sql_text
ORDER BY misq.avg_total_user_cost * misq.avg_user_impact * (misq.user_seeks + misq.user_scans) DESC; 

Pasos siguientes

Obtenga más información sobre la característica de índice que falta y los conceptos relacionados en los artículos siguientes: