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!

3 comentarios en “Script para eliminar los índices que siguen un determinado patrón”

  1. @preguntoncojonero: No me molestan las preguntas… que yo puedo contestar mejor que Google.

    Lo tuyo es patologíco, tio… no hay que preguntar por preguntar… ¡hombre!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *