Abbiamo un database molto grande con centinaia di indici inutilizzati secondo le statistiche DMV, che si sono accumulate dall'ultimo riavvio del server a luglio. Uno dei nostri DBA ha rilasciato le seguenti dichiarazioni cautelative, che per me non hanno senso:
- Prima di rilasciare un indice, è necessario accertarsi che non imponga un vincolo di unicità, poiché Query Optimizer potrebbe aver bisogno di questo indice per esistere.
- Ogni volta che viene creato un indice, anche le statistiche relative a tale indice vengono create in SQL Server. Una query potrebbe non utilizzare l'indice ma potrebbe utilizzare le sue statistiche. Quindi potremmo imbatterci in una situazione, dopo aver lasciato cadere un indice una prestazione della query particolare va davvero male. SQL Server non mantiene le statistiche di utilizzo delle statistiche. Sebbene nel nostro database sia abilitata la funzione "Crea automaticamente statistiche", non so quali parametri devono essere soddisfatti internamente prima che Query Optimizer crei le statistiche mancanti.
Per quanto riguarda il n. 1, mi sembra che SQL Server farebbe effettivamente una ricerca sull'indice per determinare l'univocità prima che venga effettuato un inserimento / aggiornamento e, pertanto, l'indice non mostrerebbe come non utilizzato.
Per quanto riguarda il n. 2, è davvero possibile?
A proposito, quando dico che un indice non viene utilizzato, intendo nessuna ricerca e nessuna scansione.