Index Rebuild MS SQL Server
SQL Server: Index‑Wartung (Standard Edition)
Diese Dokumentation beschreibt, wie in einer Microsoft SQL Server Standard Edition die Indizes einer Datenbank gewartet werden. Da die Standard Edition keine Online‑Rebuilds unterstützt, müssen Rebuilds außerhalb der Betriebszeiten durchgeführt werden.
1. Fragmentierung prüfen
Um festzustellen, wie stark die Indizes fragmentiert sind:
SELECT
dbschemas.[name] AS 'Schema',
dbtables.[name] AS 'Table',
dbindexes.[name] AS 'Index',
indexstats.avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, 'LIMITED') AS indexstats
INNER JOIN sys.tables dbtables ON dbtables.[object_id] = indexstats.[object_id]
INNER JOIN sys.schemas dbschemas ON dbtables.[schema_id] = dbschemas.[schema_id]
INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]
AND indexstats.index_id = dbindexes.index_id
WHERE indexstats.avg_fragmentation_in_percent > 5
ORDER BY indexstats.avg_fragmentation_in_percent DESC;
Interpretation:
5–30 % → REORGANIZE
>30 % → REBUILD (offline in Standard Edition)
2. Statistiken aktualisieren (empfohlen vor jedem Rebuild)
Kann jederzeit im laufenden Betrieb ausgeführt werden.
EXEC sp_updatestats;
3. Index‑Rebuild aller Tabellen (Standard Edition, offline)
Dieser Schritt sollte außerhalb der Betriebszeiten ausgeführt werden, da Tabellen während des Rebuilds gesperrt werden.
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql = @sql +
'ALTER INDEX [' + i.name + '] ON [' + s.name + '].[' + t.name + '] REBUILD WITH (ONLINE = OFF);' + CHAR(13)
FROM sys.indexes i
JOIN sys.tables t ON i.object_id = t.object_id
JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE i.type_desc <> 'HEAP'
AND i.is_disabled = 0;
EXEC sp_executesql @sql;
Hinweise:
HEAP‑Tabellen (ohne Clustered Index) werden übersprungen.
Während des Rebuilds sind Tabellen exklusiv gesperrt.
Dauer bei 200k–1 Mio Zeilen meist nur Sekunden bis wenige Minuten.
4. Optional: Index‑Reorganize (online, tagsüber möglich)
Kann im laufenden Betrieb ausgeführt werden, blockiert nicht.
ALTER INDEX ALL ON dbo.DeineTabelle REORGANIZE;
Einsatz: Nur sinnvoll bei Fragmentierung unter 30 %.
5. Fehlende Indizes prüfen
SQL Server zeigt an, welche Indizes fehlen und Performance verbessern würden:
SELECT *
FROM sys.dm_db_missing_index_details;
Hinweis: Diese Vorschläge sind oft wertvoll, aber nicht blind übernehmen — prüfen, ob sie zur Abfrage passen.
6. Empfohlene Wartungsroutine
Täglich / wöchentlich:
- sp_updatestats
- REORGANIZE bei Fragmentierung 5–30 %
- Monatlich / bei Bedarf: REBUILD aller Indizes (außerhalb der Betriebszeiten)