sql >> Database teknologi >  >> RDS >> Sqlserver

Slip og genskab automatisk aktuelle indekser

Jeg har et script, som jeg bruger til at forespørge systemtabellerne for at fange alle ikke-klyngede indekser og deaktivere og derefter genopbygge efter færdiggørelse. Nedenstående er til brug på standardudgaven, hvis du er på virksomhed vil jeg tilføje ONLINE mulighed.

Deaktiver

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)

Genopbyg

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

Jeg kan godt lide denne metode, da den er meget tilpasselig, da du kan udelukke/inkludere visse tabeller baseret på betingelserne samt undgå en markør. Du kan også ændre EXEC til en PRINT og se koden, der vil køre og køre den manuelt.

Betingelse for at ekskludere en tabel

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


  1. MySQL-databasen starter ikke i XAMPP Manager-osx

  2. Kan jeg indsætte dato i mySQL i DD-Mon-YY-format?

  3. R- Specialtegn indsættes ikke i mysql

  4. Sådan bruger du trigger i MySql til at lave fremmednøgle