troppo vago per rispondere con precisione, dipende molto dal tipo di attività svolta sul DB, dal modello di recupero utilizzato. Nella modalità di ripristino semplice, che utilizza solo file db senza log delle transazioni, se ci sono frequenti eliminazioni e inserimenti su tabelle di solito è necessario ricostruire gli indici su basi regolari.
Uso per impostare un'attività giornaliera (esecuzione notturna) che invoca sqlcmd per eseguire il seguente SQL:
--*********************************
--*** REPLACE THIS WITH DBNAME ***
USE db_mytestcopy_of_live_production
--*********************************
GO
DECLARE @Queryresult NVARCHAR(MAX)
SET @Queryresult=''
--*********************************
--DEFRAGGING THE MOST 6 FRAGMENTED INDEXES EXCLUDING ONES WITH A FRAG UP TO 35 %
--TO TAILOR IT TO YOUR NEEDS CHANGE THE NUMBERS AFTER "SELECT TOP" AND AFTER "ss.avg_fragmentation_in_percent >"
--WITHIN THE SQL HERE BELOW
--*********************************
SELECT TOP 6
@[email protected] + 'ALTER INDEX ' + QUOTENAME(i.name) + ' ON '
+ QUOTENAME('dbo') + '.'
+ QUOTENAME(OBJECT_NAME(i.OBJECT_ID)) + ' REBUILD;'
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'SAMPLED') ss
INNER JOIN sys.indexes i ON i.OBJECT_ID = ss.OBJECT_ID AND i.index_id = ss.index_id
INNER JOIN sys.objects o ON ss.object_id = o.object_id
WHERE ss.avg_fragmentation_in_percent > 35
AND ss.record_count > 0
AND o.is_ms_shipped = 0 --Excludes any objects created as a part of SQL Server installation
AND ss.index_id > 0 --Excludes heap indexes
ORDER BY ss.avg_fragmentation_in_percent DESC
--*********************************
--Uncomment to see the generated command
--*********************************
--PRINT @QueryResult
EXEC sp_executesql @QueryResult