Giorni fa ho avuto la necessità di controllare quale fosse l'operazione che SQL Server Management Studio effettua durante l'aggiunta di una colonna su un indice di copertura.
Per chi non lo sapesse, dalla versione 2008, è possibile includere colonne nelle foglie degli indici noncluster, per effettuare una più performante copertura.
Per "indice di copertura" si intende un indice che supporta una particolare query (e ne velocizza tipicamente l'esecuzione riducendo le io e di conseguenza anche il peso) basandosi solo sull'indice, senza andare a toccare l'effettiva tabella su cui l'indice è creato. Per chi volesse approfondire:
http://msdn.microsoft.com/en-us/library/ms190806.aspx
Non mi soffermerò sui dettagli del fine tuning annesso a questo tipo di operazione (ma vi consiglio vivamente di farvi una bella cultura su indici e tecniche di fine tuning per velocizzare le vostre query
), perchè volevo invece focalizzarmi su questo piccolo bug trovato per caso. Sono certo che molti di voi l'avranno notato già da tempo, ma siccome non uso spesso i designer, io sono arrivato tardi
.
Scenario molto semplice, indice già creato, vado a cambiare le sue colonne dell'inclusione.
premiamo ora il pulsante di creazione dello script di cambiamento..
lo script viene generato su una nuova finestra di Management Studio. Notiamo che l'operazione è una semplice DROP e CREATE dell'indice (non è possibile fare ALTER dell'indice per questo tipo di operazione).
Piccolo problema, se proviamo a salvare la modifica otterremo un errore.
Il fatto è che se non premiamo il pulsante script tutto funziona correttamente.
Insomma, se incontrate questo errore non preoccupatevi, ma sappiate che avete due opzioni:
- lanciate lo script (consigliato, dopo un'attenta analisi)
- rifate tutto senza scriptare le differenze
Giusto per informazione..
Non tutti i designer risolvono problemi, usate codice quanto più possibile
Stay Tuned!