Ricostruzione indici SQL Server
Durante gli inserimenti e le modifiche in una tabella è possibile che gli indici vengano a deframmentarsi, facendo scadere le performance del database. E' necessario quindi, periodicamente, riorganizzare gli indici.
Ci sono diversi modi per farlo, ad esempio è possibile ricrearlo completamente, oppure sfruttare il comando DBCC DBREINDEX che prende come parametro il nome di una tabella e ricrea automaticamente tutti gli indici a questa associati.
Lo script che segue apre un cursore che cicla su tutte le tabelle e rigenera gli indici.
USE <miodatabase>
DECLARE @tabella varchar(255)
DECLARE cursore_tabella CURSOR FOR
SELECT table_name FROM information_schema.tables
WHERE table_type = 'base table'
OPEN cursore_tabella
FETCH NEXT FROM cursore_tabella INTO @tabella
WHILE @@FETCH_STATUS = 0
BEGIN
DBCC DBREINDEX(@tabella,' ',90)
FETCH NEXT FROM cursore_tabella INTO @tabella
END
CLOSE cursore_tabella
DEALLOCATE cursore_tabella
miodatabase è il database su cui voglio fare la ricostruzione, aprendo il Query Analizer basta selezionarlo e rimuovere l'istruzione.
Lo script ha come parametro di fillfactor 90% che è il default di SQL Server, ma può essere modificato a proprio piacimento e schedulato periodicamente nei momenti in cui il database non viene utilizato in quanto, durante la rigenerazione degli indici, il comando DBCC DBREINDEX previene ogni accesso alla tabella.