Script para eliminar los índices que siguen un determinado patrón
Os dejo un script que elimina todos los índices que siguen un determinado patrón. Yo lo suelo utilizar para eliminar todos los índices que he creado tras usar el Index Tunning Wizard y seleccionar aquellos que realmente me resulta útiles o para poder volver a la línea base que tenía antes de utilizarlo. Podéis cambiar el LIKE ‘_dta_%’ por el patrón que deseéis.
También suelo utilizar este script en sesiones de optimización. Voy añadiendo índices con diferentes prefijos según el escenario que estoy optimizando, veo su impacto sobre el servidor y si quiero eliminar una serie de índices que he añadido para optimizar un determinado escenario lo puedo hacer con suma facilidad.
/* OJO: Este script es peligroso */
/* Comprobar que la select devuelve los índices que realmente deseamos borrar */
DECLARE @Index VARCHAR(128)
DECLARE @Table VARCHAR(128)
SELECT OBJECT_NAME(id) AS [table], name AS [index]
INTO #Indexes
FROM sysindexes
WHERE name LIKE '_dta_%' --Índices y estadísticas creados por el DTA
WHILE (SELECT COUNT(*) FROM #Indexes) > 0
BEGIN
SET @Index = (SELECT TOP 1 [Index] FROM #Indexes)
SET @Table = (SELECT TOP 1 [Table] FROM #Indexes)
IF (@Index LIKE '_dta_stat_%')
BEGIN
PRINT 'DROP STATISTICS ' + @Table + '.' + @Index + CHAR(13)
EXEC ('DROP STATISTICS ' + @Table + '.' + @Index )
END
ELSE
BEGIN
PRINT 'DROP INDEX [' + @Index + '] On [' + @Table + ']' + CHAR(13)
EXEC ('DROP INDEX [' + @Index + '] On [' + @Table + ']')
END
DELETE FROM #Indexes WHERE [Index] = @Index AND [Table] = @Table
END
DROP TABLE #Indexes
¡Quizás os sirva a vosotros también!