Il moltiplicarsi di indici nonclustered può essere una delle cause del deterioramento delle performance di un database. Ancor più grave sarebbe il caso in cui tali indici non siano nemmeno utilizzati: può darsi ad esempio che alcuni indici erano stati creati ad hoc per query che non vengono più eseguite. In altri casi, come nell’esempio in basso, a causa del costo delle operazioni di Key o RID lookup, il piano di esecuzione potrebbe decidere di ignorare la presenza di un indice nonclustered e di eseguire comunque uno scan completo della tabella.
Individuare l’esistenza di indici non utilizzati è uno step fondamentale per monitorare le performance di un database. Ciò può essere fatto interrogando opportunamente alcune viste di sistema come la sys.index e le DMO (dynamic management objects), in particolare la sys.dm_db_index_usage_stats. Contemporaneamente, è fondamentale monitorare la frammentazione dell’indice tramite la la sys.dm_db_index_phisical_stats ed intervenire eventualmente con una Reorganize o una Rebuild. Sei pronto per la sfida?
Articoli correlati
Leggi l’articolo su come creare un filtered index per migliorare le performance di una query e il consumo di memoria.