![](https://www.antoniopulizzi.com/wordpress/wp-content/uploads/2018/05/sqlserver.png)
Il continuo utilizzo di un DataBsase ne provoca a lungo andare una frammentazione degli indici, pertanto diventa necessario reindicizzare (o riorganizzare) le tabelle al fine di migliorarne le performance.
Per monitorare la frammentazione di una tabella si può ricorrere a diverse istruzioni, fra le quali la seguente:
DECLARE @object_name VARCHAR(20);
SET @object_name = ‘TableName’
DBCC SHOWCONTIG (@object_name) WITH TABLERESULTS, ALL_INDEXES
Sostituendo al valore “TableName” il nome della tabella da monitorare.
Dal risultato della Query, la colonna da prendere in riferimento è “LogicalFragmentation”. Se tale percentuale supera il 30% è consigliabile effettuare la reindicizzazione.
Diventa pertanto necessario per un amministratore di DataBase, monitore periodicamente gli indici, ed eventualmente riorganizzarli.
Ci sono diversi modi per effettuare una reindicizzazione, ad esempio, un sistema veloce per reindicizzare tutte le tabelle presenti in un DataBase SQL Server può essere il seguente:
EXECUTE sp_MSForEachTable @command1 =’ALTER INDEX ALL ON ? REBUILD WITH (FILLFACTOR = 90, SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = OFF, ONLINE = OFF);’
Questo comando cicla tutte le tabelle e reindicizza tutti gli indici ricostruendoli.
N.B.:
– le istruzioni sopra elencate sono valide in SQL Server 2005 e successivi