sys.dm_db_missing_index_group_stats (Transact-SQL)
Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure
Restituisce informazioni di riepilogo su gruppi di indici mancanti, escludendo gli indici spaziali.
Nel database SQL di Azure, le viste a gestione dinamica non possono esporre le informazioni che influenzerebbero l'indipendenza del database o le informazioni sugli altri database a cui l'utente dispone di accesso. Per evitare di esporre queste informazioni, ogni riga contenente dati che non appartengono al tenant connesso viene filtrata.
Nome colonna | Tipo di dati | Descrizione |
---|---|---|
group_handle | int | Identifica un gruppo di indici mancanti. Questo identificatore è univoco a livello di server. Le altre colonne contengono informazioni su tutte le query per cui l'indice del gruppo viene considerati mancante. Un gruppo di indici contiene un solo indice. Può essere aggiunto a index_group_handle in sys.dm_db_missing_index_groups. |
unique_compiles | bigint | Numero di compilazioni e ricompilazioni per cui può essere utile questo gruppo di indici mancanti. Il valore di questa colonna può essere determinato dalle compilazioni e ricompilazioni di numerose query diverse. |
user_seeks | bigint | Numero di operazioni Seek causate da query utente per cui avrebbe potuto essere utilizzato l'indice consigliato del gruppo. |
user_scans | bigint | Numero di analisi causate da query utente per cui avrebbe potuto essere utilizzato l'indice consigliato del gruppo. |
last_user_seek | datetime | Data e ora dell'ultima operazione Seek causata da query utente per cui avrebbe potuto essere utilizzato l'indice consigliato del gruppo. |
last_user_scan | datetime | Data e ora dell'ultima analisi causata da query utente per cui avrebbe potuto essere utilizzato l'indice consigliato del gruppo. |
avg_total_user_cost | float | Costo medio delle query utente che potrebbe essere ridotto dall'indice del gruppo. |
avg_user_impact | float | Vantaggio percentuale medio che potrebbe essere garantito alle query utente con l'implementazione del gruppo di indici mancanti. Questo valore indica la percentuale di riduzione media del costo delle query in caso di implementazione del gruppo di indici mancanti. |
system_seeks | bigint | Numero di operazioni Seek causate da query di sistema, ad esempio query su statistiche automatiche, per cui avrebbe potuto essere utilizzato l'indice consigliato del gruppo. Per altre informazioni, vedere Classe di evento Auto Stats. |
system_scans | bigint | Numero di analisi causate da query di sistema per cui avrebbe potuto essere utilizzato l'indice consigliato del gruppo. |
last_system_seek | datetime | Data e ora dell'ultima operazione Seek di sistema causata da query di sistema per cui avrebbe potuto essere utilizzato l'indice consigliato del gruppo. |
last_system_scan | datetime | Data e ora dell'ultima analisi di sistema causata da query di sistema per cui avrebbe potuto essere utilizzato l'indice consigliato del gruppo. |
avg_total_system_cost | float | Costo medio delle query di sistema che potrebbe essere ridotto dall'indice del gruppo. |
avg_system_impact | float | Vantaggio percentuale medio che potrebbe essere garantito alle query di sistema con l'implementazione del gruppo di indici mancanti. Questo valore indica la percentuale di riduzione media del costo delle query in caso di implementazione del gruppo di indici mancanti. |
Osservazioni:
Le informazioni restituite da sys.dm_db_missing_index_group_stats
vengono aggiornate da ogni esecuzione di query, non da ogni compilazione o ricompilazione di query. Le statistiche di utilizzo non vengono mantenute e mantenute solo fino al riavvio del motore di database. Per mantenere le statistiche di utilizzo anche dopo il riciclo del server, gli amministratori di database devono eseguire periodicamente copie di backup delle informazioni relative agli indici mancanti. Usare la colonna sqlserver_start_time
in sys.dm_os_sys_info per trovare l'ora di avvio dell'ultimo motore di database.
Nota
Il set di risultati per questa DMV è limitato a 600 righe. Ogni riga contiene un indice mancante. Se sono presenti più di 600 indici mancanti, è necessario risolvere gli indici mancanti esistenti in modo da poter visualizzare quelli più recenti.
Un gruppo di indici mancante può avere più query che richiedevano lo stesso indice. Per altre informazioni sulle singole query che richiedevano un indice specifico in questa DMV, vedere sys.dm_db_missing_index_group_stats_query.
Autorizzazioni
Per eseguire query su questa vista a gestione dinamica, è necessario che agli utenti sia stata concessa l'autorizzazione VIEW SERVER STATE o qualsiasi autorizzazione che include l'autorizzazione VIEW SERVER STATE.
Autorizzazioni per SQL Server 2022 e versioni successive
È richiesta l'autorizzazione VIEW SERVER PERFORMANCE STATE per il server.
Esempi
Negli esempi seguenti viene illustrato come usare la sys.dm_db_missing_index_group_stats
visualizzazione a gestione dinamica. Altre informazioni sulle linee guida per l'uso di indici mancanti per ottimizzare gli indici non cluster con suggerimenti per l'indice mancanti.
R. Trovare i 10 indici mancanti con il massimo miglioramento previsto per le query utente
La query seguente determina i 10 indici mancanti in grado di determinare il massimo miglioramento cumulativo previsto, in ordine decrescente, per le query utente.
SELECT TOP 10 *
FROM sys.dm_db_missing_index_group_stats
ORDER BY avg_total_user_cost * avg_user_impact * (user_seeks + user_scans)DESC;
B. Trovare i singoli indici mancanti e i relativi dettagli delle colonne per un determinato gruppo di indici mancanti
La query seguente identifica gli indici mancanti che costituiscono un determinato gruppo di indici mancanti e ne visualizza i dettagli delle colonne. Ai fini di questo esempio, l'indice group_handle
mancante è 24.
SELECT migs.group_handle, mid.*
FROM sys.dm_db_missing_index_group_stats AS migs
INNER JOIN sys.dm_db_missing_index_groups AS mig
ON (migs.group_handle = mig.index_group_handle)
INNER JOIN sys.dm_db_missing_index_details AS mid
ON (mig.index_handle = mid.index_handle)
WHERE migs.group_handle = 24;
Questa query indica il nome del database, dello schema e della tabella in cui un indice risulta mancante, nonché i nomi delle colonne da utilizzare per la chiave di indice. Quando si scrive l'istruzione CREATE INDEX DDL per implementare indici mancanti, elencare prima le colonne di uguaglianza e quindi le colonne di disuguaglianza nella clausola ON <table_name> dell'istruzione CREATE INDEX. Le colonne incluse devono essere elencate nella clausola INCLUDE dell'istruzione CREATE INDEX. Per determinare un ordine efficiente per le colonne di uguaglianza, ordinarle in base alla selettività a partire dalle colonne più selettive, all'estrema sinistra nell'elenco di colonne. Informazioni su come applicare suggerimenti per l'indice mancanti.
Passaggi successivi
Altre informazioni sulla funzionalità di indice mancante sono disponibili negli articoli seguenti:
- Ottimizzare gli indici non cluster con suggerimenti di indici mancanti
- sys.dm_db_missing_index_columns (Transact-SQL)
- sys.dm_db_missing_index_details (Transact-SQL)
- sys.dm_db_missing_index_groups (Transact-SQL)
- sys.dm_db_missing_index_group_stats_query (Transact-SQL)
- CREATE INDEX (Transact-SQL)
- sys.dm_os_sys_info (Transact-SQL)