-
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
Nota: SSMS incluso nella CTP3 di Denali non presenta più questo problema, bene!