Ich versuche Informationen über Indizes zu erhalten. Laut mehreren Websites sollte die folgende TSQL-Abfrage Informationen zu Indizes mit der Indextabelle verknüpfen und Indizes und verwandte Informationen zurückgeben. Die folgende Abfrage wird auf den Bare Join vereinfacht, da ich gerade versuche, Daten zurückzugeben, und von dort aus werde ich zurückgeben, was ich brauche:
SELECT *
FROM sys.indexes i
INNER JOIN sys.dm_db_index_usage_stats s ON i.object_id = s.object_id
Diese Abfrage gibt nichts zurück. In mehreren Datenbanken gibt es jedoch Hunderte von Tabellen mit mindestens einem Index. Gemäß verschiedenen Online-Artikeln sollte diese Abfrage diese Indizes zurückgeben (da sie sich auf die Objekt-IDs bezieht). Wenn ich versuche, die Abfrage in die folgende Abfrage zu ändern, wird auch nichts zurückgegeben:
SELECT *
FROM DATABASENAME.sys.indexes i
INNER JOIN DATABASENAME.sys.dm_db_index_usage_stats s ON i.object_id = s.object_id
Warum gibt diese Abfrage keine Daten zurück?
Hinzugefügt
Wenn ich die folgenden Abfragen ausführe, erhalte ich Daten von diesen beiden SELECTAbfragen:
SELECT *
FROM sys.indexes
SELECT *
FROM sys.dm_db_index_usage_stats
Das Problem (bei der ursprünglichen Abfrage) ist der object_idJoin. Ich weiß jedoch nicht, warum ich Objekte in einer Tabelle habe, die in einer anderen nicht vorhanden sind.
Endgültig: Martin hatte ursprünglich die richtige Antwort - obwohl Daten aus der sys.dm_db_index_usage_statsTabelle zurückgegeben wurden, befanden sie sich in der msdbDatenbank, nicht in der spezifischen Datenbank, die ich suchte. Ich habe erneut Abfragen für Tabellen ausgeführt und die Datenbank-ID in der Tabelle gefunden. Unsicher, warum in der sys.dm_db_index_usage_statsTabelle keine Daten aus früheren Abfragen in dieser Datenbank gespeichert wurden.