Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de données SQL dans Microsoft Fabric
Retourne des informations détaillées sur les index manquants.
Dans Azure SQL Database, les vues de gestion dynamique ne peuvent pas exposer des informations qui affecteraient le contenu de la base de données ou révéler des informations sur d’autres bases de données auxquelles l’utilisateur a accès. Pour éviter d’exposer ces informations, chaque ligne qui contient des données qui n’appartiennent pas au locataire connecté est filtrée.
| Nom de la colonne | Type de données | Description |
|---|---|---|
| index_handle | int | Identifie un index manquant. L'identificateur est unique sur le serveur.
index_handle est la clé de ce tableau. |
| database_id | smallint | Identifie la base de données dans laquelle réside la table comportant les index manquants. Dans la base de données Azure SQL, les valeurs sont uniques au sein d’une base de données unique ou d’un pool élastique, mais pas dans un serveur logique. |
| object_id | int | Identifie la table dans laquelle est situé l'index manquant. |
| equality_columns | nvarchar(4000) | Liste de colonnes, séparées par des virgules, qui contribuent aux prédicats d'égalité au format : table.column = constant_value |
| inequality_columns | nvarchar(4000) | Liste de colonnes, séparées par des virgules, qui contribuent aux prédicats d'inégalité, par exemple, les prédicats au format : table.column>constant_value Tout opérateur de comparaison autre que "=" exprime l'inégalité. |
| included_columns | nvarchar(4000) | Liste de colonnes, séparées par des virgules, requises comme colonnes de couverture pour la requête. Pour plus d’informations sur la couverture ou les colonnes incluses, consultez Créer des index avec des colonnes incluses. Pour les index à mémoire optimisée (hachage et non cluster à mémoire optimisée), ignorez included_columns. Toutes les commandes de la table sont incluses dans chaque index optimisé en mémoire. |
| déclaration | nvarchar(4000) | Nom de la table dans laquelle est situé l'index manquant. |
Remarques
Les informations retournées par sys.dm_db_missing_index_details sont mises à jour lorsqu’une requête est optimisée par l’optimiseur de requête et n’est pas conservée. Les informations d’index manquantes sont conservées uniquement tant que le moteur de base de données n’est pas redémarré. Les administrateurs de base de données doivent effectuer régulièrement des copies de sauvegarde des informations sur les index manquants s'ils souhaitent les conserver après le recyclage du serveur. Utilisez la colonne sqlserver_start_time dans sys.dm_os_sys_info pour rechercher la dernière heure de démarrage du moteur de base de données.
Pour déterminer les groupes d’index manquants dont un index manquant particulier fait partie, vous pouvez interroger la sys.dm_db_missing_index_groups vue de gestion dynamique en l’équijoinant en sys.dm_db_missing_index_details fonction de la index_handle colonne.
Note
Le jeu de résultats pour cette vue de gestion dynamique est limité à 600 lignes. Chaque ligne contient un index manquant. Si vous avez plus de 600 index manquants, vous devez traiter les index manquants existants afin de pouvoir afficher les plus récents.
Utilisation des informations d’index manquantes dans les CREATE INDEX instructions
Pour convertir l’information retournée en sys.dm_db_missing_index_details une CREATE INDEX instruction pour les index optimisés en mémoire et basés sur disque, les colonnes d’égalité doivent être placées avant les colonnes d’inégalité, et ensemble elles doivent former la clé de l’index. Les colonnes incluses doivent être ajoutées à l’énoncé CREATE INDEX en utilisant la clause INCLUDE. Pour définir un ordre efficace pour les colonnes d’égalité, classez-les en fonction de leur sélectivité : placez d’abord les colonnes les plus sélectives (à gauche dans la liste des colonnes). En savoir plus sur l’optimisation des index non cluster avec des suggestions d’index manquantes, notamment les limitations de la fonctionnalité d’index manquante.
Pour plus d’informations sur les index à mémoire optimisée, consultez Index pour les tables mémoire optimisées.
Cohérence des transactions
Si une transaction crée ou supprime une table, les lignes qui contiennent les informations d'index manquants concernant les objets supprimés sont retirées de cet objet de gestion dynamique, ce qui permet de préserver la cohérence des transactions. En savoir plus sur les limitations de la fonctionnalité d’index manquante.
Permissions
Sur SQL Server et SQL Managed Instance, vous devez disposer d’une autorisation VIEW SERVER STATE.
Sur sql Database de base, S0et objectifs de service S1, et pour les bases de données dans pools élastiques, le compte d’administrateur de serveur, le compte Administrateur Microsoft Entra ou l’appartenance au rôle serveur ##MS_ServerStateReader## est nécessaire. Sur tous les autres objectifs de service SQL Database, l’autorisation VIEW DATABASE STATE sur la base de données ou l’appartenance au rôle serveur ##MS_ServerStateReader## est requise.
Autorisations pour SQL Server 2022 et versions ultérieures
Nécessite VIEW une autorisation ÉTAT DE PERFORMANCE DU SERVEUR sur le serveur.
Examples
L’exemple suivant retourne des suggestions d’index manquantes pour la base de données active. Les suggestions d’index manquantes doivent être combinées si possible avec les autres et avec des index existants dans la base de données active. Découvrez comment appliquer ces suggestions dans l’optimisation des index non cluster avec des suggestions d’index manquantes.
SELECT
CONVERT (varchar(30), getdate(), 126) AS runtime, mig.index_group_handle, mid.index_handle,
CONVERT (decimal (28, 1), migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) ) AS improvement_measure,
'CREATE INDEX missing_index_' + CONVERT (varchar, mig.index_group_handle) + '_' + CONVERT (varchar, mid.index_handle) + ' ON ' + mid.statement + ' (' + ISNULL (mid.equality_columns, '') + CASE
WHEN mid.equality_columns IS NOT NULL
AND mid.inequality_columns IS NOT NULL THEN ','
ELSE ''
END + ISNULL (mid.inequality_columns, '') + ')' + ISNULL (' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement,
migs.*, mid.database_id, mid.[object_id]
FROM sys.dm_db_missing_index_groups mig
INNER JOIN sys.dm_db_missing_index_group_stats migs ON migs.group_handle = mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details mid ON mig.index_handle = mid.index_handle
WHERE CONVERT (decimal (28, 1),migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans)) > 10
ORDER BY migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans) DESC
Note
Le script Index-Creation dans Tiger Toolbox de Microsoft examine les vues DMV d’index manquants et supprime automatiquement tous les index suggérés redondants. De plus, il analyse les index à faible impact et génère des scripts de création d’index que vous pouvez passer en revue. Comme dans la requête ci-dessus, il n’exécute PAS les commandes de création d’index. Le script Index-Creation convient à SQL Server et Azure SQL Managed Instance. Pour Azure SQL Database, implémentez le paramétrage automatique d’index.
Contenu connexe
- Optimiser les index non clusterisés à l’aide des suggestions d’index manquants
- sys.dm_db_missing_index_columns (Transact-SQL)
- sys.dm_db_missing_index_groups (Transact-SQL)
- sys.dm_db_missing_index_group_stats (Transact-SQL)
- sys.dm_db_missing_index_group_stats_query (Transact-SQL)
- sys.dm_os_sys_info (Transact-SQL)