Ich habe ein Skript, mit dem ich die Systemtabellen abfrage, um alle nicht gruppierten Indizes zu erfassen und zu deaktivieren und nach Abschluss neu zu erstellen. Das Folgende gilt für die Verwendung in der Standard Edition. Wenn Sie ein Unternehmen verwenden, würde ich den ONLINE
hinzufügen Option.
Deaktivieren
DECLARE @sql AS VARCHAR(MAX);
SET @sql = '';
SELECT
@sql = @sql + 'ALTER INDEX [' + i.name + '] ON [' + o.name + '] DISABLE; '
FROM sys.indexes AS i
JOIN sys.objects AS o ON i.object_id = o.object_id
WHERE i.type_desc = 'NONCLUSTERED'
AND o.type_desc = 'USER_TABLE'
EXEC (@sql)
Neu erstellen
DECLARE @sql AS VARCHAR(MAX);
SET @sql = '';
SELECT
@sql = @sql + 'ALTER INDEX [' + i.name + '] ON [' + o.name + '] REBUILD WITH (FILLFACTOR = 80); '
FROM sys.indexes AS i
JOIN sys.objects AS o ON i.object_id = o.object_id
WHERE i.type_desc = 'NONCLUSTERED'
AND o.type_desc = 'USER_TABLE'
EXEC (@sql);
Ich mag diese Methode, da sie sehr anpassbar ist, da Sie bestimmte Tabellen basierend auf den Bedingungen ausschließen / einschließen und einen Cursor vermeiden können. Sie können auch die EXEC
ändern zu einem PRINT
und sehen Sie sich den Code an, der ausgeführt wird, und führen Sie ihn manuell aus.
Bedingung zum Ausschließen einer Tabelle
AND o.name NOT IN ('tblTest','tblTest1');