Ik heb een script dat ik gebruik om de systeemtabellen te doorzoeken om alle niet-geclusterde indexen vast te leggen en uit te schakelen en vervolgens opnieuw op te bouwen na voltooiing. Het onderstaande is voor gebruik in de standaardeditie, als u zakelijk werkt, zou ik de ONLINE
. toevoegen optie.
Uitschakelen
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)
Herbouwen
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);
Ik vind deze methode leuk omdat deze zeer aanpasbaar is, omdat je bepaalde tabellen kunt uitsluiten/opnemen op basis van de voorwaarden en een cursor kunt vermijden. U kunt ook de EXEC
. wijzigen naar een PRINT
en bekijk de code die wordt uitgevoerd en voer deze handmatig uit.
Voorwaarde om een tafel uit te sluiten
AND o.name NOT IN ('tblTest','tblTest1');