agosto 2011 - Posts

SSMS, smettila di indicizzare! è maleducazione!

A mio avviso una delle feature migliori introdotte con SQL Server 2005 sono state le Indexed Views.

Se usate correttamente (e con parsimonia) possono portare grandi benefici alle query, abbassando notevolmente i tempi di esecuzione e l'impatto su disco e CPU.

Nel caso vi capiti di usarle è però bene ricordarsi una cosa, se state utilizzando SSMS 2005/2008/2008R2: se anche portate a true l'opzione "Script indexes" in Tools -> Options -> SQL Server Object Explorer -> Scripting

 

e successivamente, da object explorer, lanciate il comando da menu contestuale ALTER (o anche CREATE, o DROP and CREATE, è indifferente) sulla vista indicizzata da modificare quello che otterrete è esclusivamente il corpo della vista, ma non i suoi indici. E' bene notare che nel caso si faccia la stessa cosa con una tabella gli indici saranno correttamente presenti.

Ovviamente, nel caso di un ALTER fatto velocemente e distrattamente vengono distrutti in un colpo solo tutti gli indici della vista senza alcun avviso o messaggio d'errore, in quanto il comando ALTER VIEW per prima cosa elimina gli eventuali indici presenti e successivamente aggiorna il text della vista.

L'alternativa in questo caso è utilizzare la task "Generate scripts" dal menu contestuale del database che contiene la vista

 

e selezionarla per la generazione script. Lo script così generato conterrà anche gli indici, e si potra tranquillamente utilizzare quello per le modifiche da effettuare.

La mamma lo dice sempre che indicizzare è maleducazione, ma SSMS mi sembra un po' troppo un bravo bambino, a volte Big Smile

Nota: SSMS incluso nella CTP3 di Denali non presenta più questo problema, bene!