
Riorganizzazione di un indice
Per riorganizzare uno o più indici, utilizzare l'istruzione ALTER INDEX con la clausola REORGANIZE. Questa istruzione sostituisce l'istruzione DBCC INDEXDEFRAG. Per riorganizzare una singola partizione di un indice partizionato, utilizzare la clausola PARTITION di ALTER INDEX.
La riorganizzazione di un indice deframmenta il livello foglia degli indici cluster e non cluster delle tabelle e delle viste riordinando fisicamente le pagine al livello foglia, in modo che l'ordine corrisponda a quello logico (da sinistra a destra) dei nodi foglia. Il fatto che le pagine siano in ordine migliora le prestazioni delle operazioni di scansione degli indici. La riorganizzazione viene eseguita nell'ambito delle pagine esistenti allocate all'indice. Non vengono allocate nuove pagine. Se un indice si espande su più file, i file vengono riorganizzati uno alla volta. Non viene eseguita la migrazione delle pagine da un file all'altro.
La riorganizzazione, inoltre, compatta le pagine dell'indice. Le eventuali pagine vuote create in seguito alla compattazione vengono eliminate, liberando spazio su disco. La compattazione viene eseguita in base al valore del fattore di riempimento della vista del catalogo sys.indexes.
Il processo di riorganizzazione utilizza una quantità minima di risorse di sistema e viene eseguito automaticamente in modalità in linea. Il processo non applica blocchi di lunga durata, pertanto non blocca le query o gli aggiornamenti in esecuzione.
La riorganizzazione è da preferire quando l'indice non è molto frammentato. Le linee guida sulla frammentazione sono riportate nella tabella precedente. Se l'indice è molto frammentato si otterranno risultati migliori eseguendo una ricostruzione.
Compattazione di dati LOB (Large Object)
Oltre alla riorganizzazione di uno o più indici, i dati di tipo LOB (Large Object) contenuti nell'indice cluster o nella tabella sottostante vengono compattati per impostazione predefinita quando si esegue la riorganizzazione di un indice. I tipi di dati image, text, ntext, varchar(max), nvarchar(max), varbinary(max) e xml sono dati LOB. La compattazione di questi dati può migliorare l'utilizzo dello spazio su disco:
-
Riorganizzando un indice cluster specificato verrà eseguita la compattazione di tutte le colonne LOB contenute nel livello foglia (righe di dati) dell'indice.
-
Riorganizzando un indice non cluster verrà eseguita la compattazione di tutte le colonne LOB non chiave (incluse) contenute nell'indice.
-
Se si specifica ALL, tutti gli indici associati alla tabella o vista specificata vengono riorganizzati e tutte le colonne LOB associate all'indice cluster, alla tabella sottostante o all'indice non cluster con colonne incluse vengono compattate.
-
Se non sono presenti colonne LOB, la clausola LOB_COMPACTION viene ignorata.