Dans le système sur lequel je travaille, nous avons vu un SELECT particulier utiliser un scan d'index en cluster, au lieu d'utiliser l'index qui a été créé pour ce SELECT. J'ai regardé les statistiques de l'indice et j'ai constaté qu'ils avaient 26 jours. J'ai mis à jour les statistiques avec FULLSCAN. Maintenant, le SELECT utilise l'index.AUTO_UPDATE_STATISTICS ne parvient pas à mettre à jour les statistiques pour certains index. Pourquoi?
AUTO_UPDATE_STATISTICS a été activé dans cette base de données tout le temps. Pourquoi les statistiques n'ont-elles pas été mises à jour?
En regardant la sortie STATS_DATE() (requête ci-dessous):
SELECT
object_name = Object_Name(ind.object_id),
IndexName = ind.name,
StatisticsDate = STATS_DATE(ind.object_id, ind.index_id),
ind.type
FROM SYS.INDEXES ind
order by STATS_DATE(ind.object_id, ind.index_id) desc
Je vois que de nombreux indices ont été mis à jour récemment. Certaines grandes tables qui ont des mises à jour de données tous les jours n'ont pas de statistiques mises à jour depuis des semaines.
Comment MSSQL 2005 décide-t-il de mettre à jour les statistiques lorsque AUTO_UPDATE_STATISTICS est activé? La documentation indique:
Une mise à jour des statistiques est lancée chaque fois que les statistiques utilisées dans un plan d'exécution de requête échouent à un test pour les statistiques en cours. . . Presque toujours, les informations statistiques sont mises à jour lorsqu'environ 20% des lignes de données ont changé.
Peut-on faire confiance? Peut-être que ces tableaux sont si volumineux que le «test de statistiques actuelles» est en cours, même si les enregistrements sont insérés quotidiennement.
Je parie que vous le souhaitez, vous utilisiez SQL2K8 pour que vous puissiez changer cet index à un index filtré. –