Reindicizzazione, quando è utile?

lunedì 27 luglio 2015 - 10.18
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows Server 2008 R2  |  Visual Studio 2010  |  SQL Server 2008 R2

Barabas Profilo | Junior Member

Salve a tutti,
o un database su sql server 2008 R2, in cui una tabella viene periodicamente svuotata (con truncate) e ripopolata con un grande numero di righe, circa 1 milione.
poi un'applicativo .Net esegue diverse query su questa tabella.
Inizialmente queste query risultavano molto lente e per velocizzarle abbiamo aggiunto un indice su una colonna (non è una chiave). la velocità delle query è migliorata di molto per qualche tempo, ma ora è di nuovo bassa.

Mi chiedevo se fosse necessaria una reindicizzazione, o ancora meglio se fosse utile aggiungere un comando di reindicizzazione al termine della procedura di popolamento della tabella.
quale sarebbe il comando da utilizzare ed è possibile inserirlo in una stored procedure?

in passato ho usato la reindicizzazione per risolvere problemi simili, ma non ricordo granchè, perciò chiedo il vostro consiglio

grazie in anticipo


Barabas

alx_81 Profilo | Guru

>Salve a tutti,
ciao

>Inizialmente queste query risultavano molto lente e per velocizzarle
>abbiamo aggiunto un indice su una colonna (non è una chiave).
>la velocità delle query è migliorata di molto per qualche tempo,
>ma ora è di nuovo bassa.
>Mi chiedevo se fosse necessaria una reindicizzazione, o ancora
>meglio se fosse utile aggiungere un comando di reindicizzazione
>al termine della procedura di popolamento della tabella.
>quale sarebbe il comando da utilizzare ed è possibile inserirlo
>in una stored procedure?
In generale, cancellazioni e scritture creano una grande frammentazione negli indici, quindi, dopo l'operazione massiva è bene fare una riorganizzazione o ricostruzione dell'indice.
La prima è consigliata se l'indice ha una frammentazione inferiore al 30%, la seconda negli altri casi. Visto che fai l'operazione una tantum, ti consiglio di fare una rebuild dell'indice.
Ad ogni modo se vuoi vedere il livello di frammentazione puoi utilizzare il designer di SSMS (nelle proprietà dell'indice, alla voce Storage).
In aggiunta, se vuoi controllare gli eventuali indici mancanti, leggi qui https://msdn.microsoft.com/en-us/library/ms187974(v=sql.105).aspx

>grazie in anticipo
di nulla!
Alessandro Alpi | SQL Server MVP | Engage IT Services s.r.l.
MCP|MCITP|MCTS|MCT
http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5