Diario de SQL Server

... y eliminar los índices que no se usan (2/2)

Si en el anterior post hablábamos de la cómo crear los índices que se necesitan (http://qwalgrande.blogspot.es/1284932940/crear-los-indices-que-se-necesitan...-(1/2)/), aquí hablamos de lo contrario. Si no se usa un índice, lo mejor es eliminarlo.

 

Antes de SQL Server 2005, se tenía el miedo de eliminar un índice porque era complejo determinar cuándo un índice no se usaba. Sin embargo, de SQL Server 2005 en adelante, conservar un índice que no se va a usar carece de todo sentido, porque tenemos forma de saber si se usan o no. Para ello, se puede emplear un script similar a este:


select

  object_name(i.id) as Tabla,

  case i.indid

    when 0 then N'HEAP'

    else i.name

  end as Indice,

  i.Indid,

  i.rowcnt,

  i.dpages * 8/(1024.0) as Tamaño,

  i.*--i.type_desc as Tipo

  ,u.*

  , 'drop index [' + object_name(i.id) + '].[' +

  case i.indid when 0 then N'HEAP' else i.name end +']' as Borrado

from

  sysindexes i with(nolock) inner join

  sys.objects o with(nolock) on i.id = o.object_id left join

  sys.dm_db_index_usage_stats u with(nolock) 

     on i.id = u.object_id and i.indid = u.index_id and u.database_id = db_id()

where 

  o.type = 'u' and i.status & 64 = 0 and i.indid > 1 and

  --u.object_id is null --and i.type_desc = 'NONCLUSTERED'

  (u.user_seeks = 0 and u.user_scans = 0 or u.object_id is null)

order by i.dpages desc, Tabla, i.Indid

 

Y eso es todo, no se usa, se borra, para lo cual puede hacerse uso directamente de la última columna de la sentencia.

 

Comentarios

No hay ningún comentario

Añadir un Comentario: