La rebuild di un indice clustered ricostruisce quelli non clustered?

No in SQL Server 2005; in SQL Server 2000 dipende...

Su questo argomento mi sono accorto recentemente che c'è un po di confusione, alimentata anche dal fatto che alcuni bug presenti in SQL Server 2000 hanno alterato quello che doveva essere il comportamento di SQL Server in occasione della ricostruzione di un indice clustered.

Come noto la chiave dell'indice clustered rappresenta il puntatore ai dati per tutti gli indici non clustered della stessa tabella. Non vi sarebbe quindi ragione perchè una ricostruzione di un indice clustered, che opera una pura compattazione e ovviamente non si permetterebbe di alterare i valori dei dati, dovrebbe in qualche modo rendere necessario ricostruire anche gli altri indici.

Quando un indice clustered non è univoco, però, SQL Server deve aggiungere alla chiave un valore di tipo int (che quindi grava sulla struttura di indice), per assicurare l'univocità "interna" di ciascuna chiave affinchè la stessa possa essere utilizzata come puntatore ai dati da parte di un indice non clustered.

Come riportato in questo post di Paul Randal, in SQL Server 2000 tale valore veniva rigenerato ad ogni rebuild dell'indice non clustered causando quindi la necessità di ricreare il puntatore ai dati per tutti gli indici non clustered. In SQL Server 2005 tale attributo (che ricordo viene aggiunto SOLO quando l'indice clustered non è univoco) viene preservato dall'attività di ricostruzione e pertanto il rebuild di un indice clustered non causerà mai la ricostruzione degli indici non clustered.

Bye

 

Published martedì 4 dicembre 2007 11.45 by lbianchi
Filed under: , ,

Comments

No Comments