Database Engine Tuning Advisor Hinterlassenschaften

Durch einen Thread im Forum von CA für deren Tool ERwin bin ich heute auf einen Umstand gestoßen, der zumindest eine kurze Notiz wert ist.

Falls man mit dem Database Engine Tuning Advisor gearbeitet hat und diese Arbeit aus irgendeinem Grunde unterbrochen wurde, kann es vorkommen, dass einige Hinterlassenschaften in der Datenbank geblieben sind.

Bei den Tabellen finden sich unter Umständen Indizes, deren Name mit "_dta_" anfängt, bei den Statistiken gilt dies ebenso. Anscheinend werden die Indizes aber nicht unbedingt im Management Studio angezeigt, da sie eine Eigenschaft haben, die dafür sorgt, dass sie ausgeblendet werden.

IS_HYPOTHETICAL

Diese Information findet sich in der Tabelle sys.indexes wieder, entweder direkt als Spalte, oder über INDEXPROPERTY.

Man kann diese Indizes nicht über die DMV sys.dm_db_partition_stats abfragen, da sie im herkömmlichen Sinn keinen Platz benötigen. Hypothetische Indizes haben Statistiken auf Spaltenebene, welche vom DTA verwendet werden. Man kann sie aber nicht für den Zugriff auf die Daten wirklich verwenden.
Zitat: Index is hypothetical and cannot be used directly as a data access path. Hypothetical indexes hold column-level statistics and are maintained and used by Database Engine Tuning Advisor.

Wenn man solche Überreste hat, möchte man sie evtl. gerne entfernen. Mit diesen beiden Statements kann man sie sich schon mal anzeigen lassen.

SELECT OBJECT_NAME(OBJECT_ID) AS table_name, name AS index_name
FROM sys.indexes
WHERE is_hypothetical = 1
ORDER BY OBJECT_NAME(OBJECT_ID), name;

SELECT OBJECT_NAME(OBJECT_ID) AS table_name, name AS index_name
FROM sys.indexes
WHERE INDEXPROPERTY(OBJECT_ID, name, 'IsHypothetical') = 1
ORDER BY OBJECT_NAME(OBJECT_ID), name;

Mit DROP INDEX und DROP STATISTICS kann man die entsprechenden Hinterlassenschaften wieder beseitigen.