Nous avons une très grande base de données avec des centaines d'index inutilisés selon les statistiques DMV, qui se sont accumulés depuis le dernier redémarrage du serveur en juillet. L'un de nos administrateurs de base de données a émis les avertissements suivants, qui n'ont aucun sens pour moi:
- Avant de supprimer un index, nous devons nous assurer qu'il n'applique pas une contrainte d'unicité, car l'optimiseur de requête peut avoir besoin de cet index pour exister.
- Chaque fois qu'un index est créé, les statistiques liées à cet index sont également créées dans SQL Server. Une requête n'utilise peut-être pas l'index, mais elle utilise peut-être ses statistiques. Nous pouvons donc rencontrer une situation, après la suppression d'un index, les performances d'une requête particulière deviennent vraiment mauvaises. SQL Server ne conserve pas les statistiques d'utilisation des statistiques. Bien que la fonctionnalité «Création automatique de statistiques» soit activée dans notre base de données, je ne sais pas quels paramètres doivent être respectés en interne avant que l'optimiseur de requête crée les statistiques manquantes.
En ce qui concerne # 1, il me semble que SQL Server ferait réellement une recherche sur l'index pour déterminer l'unicité avant qu'une insertion / mise à jour soit effectuée, et par conséquent, l'index ne s'afficherait pas comme n'étant pas utilisé.
Concernant # 2, est-ce vraiment possible?
Soit dit en passant, quand je dis qu'un index n'est pas utilisé, je veux dire pas de recherche ni d'analyse.