Ho uno script che utilizzo per interrogare le tabelle di sistema per acquisire tutti gli indici non in cluster e disabilitare la ricostruzione al termine. Il seguente è per l'uso su edizione standard, se si è in azienda vorrei aggiungere l'opzione ONLINE
.
Disabilita
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)
Ricostruire
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);
Mi piace questo metodo in quanto è molto personalizzabile, come è possibile escludere/includere alcune tabelle in base alle condizioni, così come evitare una cursore. Inoltre è possibile modificare EXEC
in PRINT
e vedere il codice che verrà eseguito manualmente.
Condizioni di escludere un tavolo
AND o.name NOT IN ('tblTest','tblTest1');
fonte
2012-07-02 22:02:38
Specificare l'RDBMS a cui si sta mirando aggiungendo il tag appropriato (Oracle, SQL Server, MySQL ecc.). Ci saranno risposte che sfruttano il linguaggio o le caratteristiche del prodotto che non sono universalmente supportate. Inoltre, taggandolo con un RDBMS specifico, la tua domanda potrebbe ricevere l'attenzione di persone più adatte a rispondere alla tua domanda. – Ben