sql >> Databasteknik >  >> RDS >> Sqlserver

Släpp och återskapa aktuella index automatiskt

Jag har skript som jag använder för att fråga systemtabellerna för att fånga alla icke-klustrade index och inaktivera och sedan bygga om det när det är klart. Nedanstående är för användning på standardutgåvan, om du är på företag skulle jag lägga till ONLINE alternativ.

Inaktivera

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)

Bygg om

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);

Jag gillar den här metoden eftersom den är väldigt anpassningsbar eftersom du kan utesluta/inkludera vissa tabeller baserat på villkoren samt undvika en markör. Du kan också ändra EXEC till en PRINT och se koden som kommer att köras och köras manuellt.

Villkor för att utesluta en tabell

AND o.name NOT IN ('tblTest','tblTest1');


  1. dela en rad i flera rader i SQL

  2. Specialtecken i PHP/MySQL

  3. Konvertera Raw SQL Query till Laravel Eloquent

  4. Lagra IPv6 i databasen