|
Ricostruire gli Indici
Può capitare che un DB dopo aver subito massicce operazioni di inserimento, contenga
molte tabelle con indici "frammentati" e quindi poco efficienti che devono essere ricreati.
Se una tabella ha indici molto frammentati, il server non è più in grado di fornire
prestazioni adeguate, anche se si eseguono interrogazioni standard per cui gli indici
sarebbero corretti.
In questi casi, si può procedere alla ricostruzione degli indici di alcune o tutte le
tabelle del DB.
Tale operazione, se le tabelle sono molte, risulta, a dir poco, lunga e tediosa, per
cui sarebbe utile avere una procedura automatica che svolga il compito.
|
Soluzione
Declare @TabNm As sysname
DECLARE curTabs CURSOR LOCAL FAST_FORWARD FOR
Select name from sys.tables
Where name Like N'%'
Order by name
OPEN curTabs
FETCH NEXT FROM curTabs INTO @TabNm
WHILE @@FETCH_STATUS = 0
BEGIN
Print N'Reindexing ' + @TabNm + N'...'
Execute(N'DBCC DBREINDEX (''[' + @TabNm + N']'', '''', 0)')
Execute(N'UPDATE STATISTICS [' + @TabNm + N']')
FETCH NEXT FROM curTabs INTO @TabNm
END
END_OF_LOOP:
CLOSE curTabs
DEALLOCATE curTabs
Questa procedura oltre a ricostruire gli indici, aggiorna anche le statistiche.
E' possibile personalizzare la clausola di Where nella definizione del cursore in modo da operare su un insieme
ridotto di tabelle, invece che su tutte.
Tutte le Utility