Man mano che esegui gli aggiornamenti degli inserti e le eliminazioni, i tuoi indici diventeranno frammentati sia internamente che esternamente.
La frammentazione interna è che hai un'alta percentuale di spazio libero nelle pagine dell'indice, il che significa che SQL Server deve leggere più pagine durante la scansione dell'indice.
La frammentazione esterna è quando le pagine dell'indice non sono più in ordine, quindi SQL Server deve fare più lavoro, soprattutto in termini di IO per leggere l'indice.
Se i tuoi indici diventano troppo frammentati, nella migliore delle ipotesi le tue query saranno meno efficienti, ma nella peggiore delle ipotesi, SQL Server smetterà di usare gli indici tutti insieme, il che significa che praticamente tutte le query dovrebbero eseguire una scansione di tabelle o una scansione di indici cluster. Questo danneggerà molto la tua esibizione!
Quando si riorganizza un indice, SQL Server utilizza le pagine dell'indice esistenti e mescola i dati solo in quei periodi. Ciò allevia la frammentazione interna e può anche rimuovere una piccola quantità di frammentazione esterna. È un'operazione più leggera rispetto alla ricostruzione ed è sempre online.
Quando si ricostruisce un indice, SQL Server effettivamente ricorre ai dati dell'indice e utilizza un nuovo set di pagine di indice. Ciò ovviamente allevierà la frammentazione sia interna che esterna, ma è un'operazione più pesante e per impostazione predefinita fa sì che l'indice diventi offline, sebbene possa essere eseguito come un'operazione online, a seconda della versione e delle impostazioni di SQL Server.
Tuttavia, non aspettarti di avere una frammentazione 0 dopo una ricostruzione. A meno che non si utilizzi un suggerimento per la query MAXDOP, SQL Server parallelizzerà l'operazione di ricostruzione e più processori saranno coinvolti, maggiore sarà la frammentazione, poiché ciascun processore o core ricostruirà individualmente la propria sezione o frammento dell'indice, indipendentemente da l'un l'altro. Questo è un compromesso tra i migliori livelli di frammentazione e il tempo impiegato per ricostruire l'indice. Per una frammentazione quasi 0, utilizzare MAXDOP 1 e ordinare i risultati in TempDB.