Dass Indizes im SQL Server ihre Daseinsberechtigung haben ist nichts wirklich Neues. Dass diese Indizes hin und wieder auch gepflegt werden müssen, mag vielleicht manche Leute überraschen, die sich durch die ansonstige Pflegeleichtigkeit des SQL Servers haben einlullen lassen. Denkt man jedoch in Ruhe darüber nach, wird man einsehen, dass dies notwendig ist und dass es Sinn macht, dass SQL Server diese Aufgabe nicht automatisch einfach blind nach Schema F erledigt.
Von Zeit zu Zeit kann die Neuerstellung eines Clustered Index signifikante Performancesteigerung bewirken. Doch was passiert eigentlich während solch einer Operation?...
Hier sind diverse Möglichkeiten um zu überprüfen, für welche Tabellen kein Clustered Index definiert wurde:
SELECT
DB_NAME(IXStats.database_id) AS DatabaseName,
OBJECT_NAME (IXStats.[object_id]) AS TabellenName,
SIX.[Name] AS IndexName,
IXStats.avg_fragmentation_in_percent,
IXStats.index_type_desc
FROM
sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) IXStats
JOIN
sys.indexes SIX ON IXStats.[object_id] = SIX.[object_id] AND IXStats.index_id = SIX.index_id
WHERE
IXStats.database_id = DB_ID()
ORDER BY
IXStats.avg_fragmentation_in_percent DESC