RICOSTRUITO - Indice cluster, TABELLA o entrambi?


9

Ho difficoltà a trovare una risorsa definitiva su questo ovunque, quindi spero che un guru possa darmi una risposta qui.

Ho una tabella molto grande alla quale abbiamo dovuto aggiungere una colonna. L'indice cluster è piuttosto frammentato e voglio fare uno ALTER INDEX REBUILDper ripulirlo.

Normalmente faccio anche un ALTER TABLE REBUILDquando cambio le colonne poiché questo pulisce qualsiasi puntatore o si divide da quell'operazione.

Devo fare entrambe le cose poiché stiamo parlando di un indice cluster, che è essenzialmente la tabella?

Il mio sospetto è che ALTER INDEX REBUILDsul cluster non aggiornerà tutto ciò che la ALTER TABLEvolontà, ma ho anche paura che ALTER TABLEnon ripulisca la frammentazione dell'indice.


La ricostruzione IIRC non aggiorna le statistiche delle colonne. Il dubbio è rilevante poiché non accadrà in entrambi i casi. :-)
Aaron Bertrand

Risposte:


6

Se si ricostruisce l'indice cluster, non dovrebbe essere necessario ricostruire la tabella. Se la tabella era un heap (non aveva un indice cluster), potresti volerlo ricostruire.


Ho letto in precedenza che quando si rimuove una colonna, è necessario eseguire una ALTER TABLE REBUILDpoiché questo risolverà i puntatori non corretti nella ricostruzione dell'indice. Non è più così?
JNK,

Quali puntatori? Non l'ho mai sentito. La rimozione di una colonna non ha alcun puntatore, a meno che non si parli di tipi di dati TEXT, NTEXT, IMAGE in SQL 2000.
mrdenny

1
Penso che le mie preoccupazioni siano quindi infondate ...
JNK,

@JNK: ho il sospetto si intende DBCC CLEANTABLE quando le colonne droppimg che è lo stesso di ricostruire l'indice cluster stackoverflow.com/a/808368/27535 e dba.stackexchange.com/search?q=%2BDBCC+%2BCLEANTABLE
gbn

0

Ricostruisci drop e ricrea l'indice. Quando si crea un indice cluster, riordina le righe di una tabella oltre a creare CIX (una tabella senza CIX è un heap).


4
La ricostruzione non elimina e ricrea l'indice cluster. La caduta dell'indice cluster trasforma la tabella in un heap. Se la ricostruzione "abbandonasse e ricreasse" ci dovrebbe essere uno stato intermedio in cui la tabella è un heap, il che non è vero. Se non mi credi che non ci sia uno stadio di heap intermedio, considera che se tale stato di heap intermedio fosse raggiunto, il 'ricreare' richiederebbe una sorta, ma una rapida occhiata al piano di esecuzione della ricostruzione rivela che non c'è alcun tipo.
Remus Rusanu,

Con i migliori saluti RR, mi piace leggere i tuoi post, ma non sono sicuro del motivo per cui sosterresti questo punto. Ho già collegato l'MSDN ufficiale. Dalla sezione "Ricostruzione degli indici" a metà circa, prima frase: "La ricostruzione di un indice diminuisce e ricrea l'indice". Non c'è ambiguità in questa affermazione. Eccolo di nuovo: msdn.microsoft.com/en-us/library/ms188388.aspx
Eric Higgins,

1
BOL e MSDN possono avere una scarsa scelta di formulazione di volta in volta, e poi di volta in volta ... Questo sarebbe un caso del genere.
Remus Rusanu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.