In dem System, an dem ich arbeite, sehen wir, dass ein bestimmtes SELECT einen Clustered-Index-Scan verwendet, anstatt den Index zu verwenden, der für dieses SELECT erstellt wurde. Ich habe mir die Statistiken für den Index angesehen und festgestellt, dass sie 26 Tage alt waren. Ich habe die Statistiken mit FULLSCAN aktualisiert. Jetzt benutzt der SELECT den Index.AUTO_UPDATE_STATISTICS kann Statistiken für bestimmte Indizes nicht aktualisieren. Warum?
AUTO_UPDATE_STATISTICS wurde in dieser Datenbank die ganze Zeit aktiviert. Warum wurde die Statistik nicht aktualisiert?
Mit Blick auf die STATS_DATE() -Ausgabe (Abfrage unten):
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
Ich sehe, dass viele Indizes aktualisiert wurden. Einige große Tabellen, die täglich Datenupdates enthalten, haben seit Wochen keine aktualisierten Statistiken mehr.
Wie entscheidet MSSQL 2005, wann Statistiken aktualisiert werden sollen, wenn AUTO_UPDATE_STATISTICS aktiviert ist? Die Dokumentation lautet:
Eine Statistikaktualisierung wird immer dann ausgelöst, wenn die in einem Abfrageausführungsplan verwendeten Statistiken einen Test für aktuelle Statistiken nicht bestehen. . . Fast immer werden statistische Informationen aktualisiert, wenn sich ungefähr 20 Prozent der Datenzeilen geändert haben.
Kann dies vertraut werden? Vielleicht sind diese Tabellen so groß, dass der "Statistic Statistics Test" auch dann noch besteht, wenn täglich Datensätze eingefügt werden.
Ich wette, Sie wünschen Sie wurden mit SQL2K8, so dass Sie diesen Index auf einen gefilterten Index ändern könnte. –