+39 339 8585151
info@easytarg.com
skip to the main content area of this page
I Ferri del Mestiere
 

Ricostruire gli Indici


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