Eliminación de Índices no Usados

La tercera columna muestra el % de utilización de cada índice, la idea será eliminar aquellos índices cuyo uso este identificado como 0.

Es muy probable que en uno de los reportes generados existan índices sin uso y, en otro reporte el mismo índice se encuentre utilizado. De allí la necesidad de concentrar todos los reportes en uno solo y utilizar algún método computacional que nos ayude a obtener un resumen adecuado del uso o no de todos lo índices.

Para eso creamos la siguiente tabla (o base de datos con esta única tabla):

CREATE TABLE [dbo].[Analisis] (

[Tabla] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AI NOT NULL ,

[Indice] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AI NOT NULL ,

[Uso] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AI NOT NULL ,

 [Peso] [int] NOT NULL ,

 [Base] [varchar] (15) COLLATE SQL_Latin1_General_CP1_CI_AI NULL ,

[Fecha] [datetime] NOT NULL

) ON [PRIMARY]

Carga del Informe a una Tabla SQL

Una vez creada, utilizamos el Asistente para Importación/Exportación con Servicios de Transformación de Datos para importar nuestro archivo txt a la tabla SQL.

El origen será txt el destino será SQL. El cuidado que hay que tener es, elegir el tabulador como delimitador de columnas.

También es necesario elegir la tabla Análisis como destino.

A continuación utilizamos el siguiente procedimiento almacenado para obtener los índices no utilizados.

CREATE PROCEDURE Indices_Inactivos AS

declare

@Base varchar(15),

@Tabla varchar(50),

@Indice varchar(100),

@BaseAnt varchar(15),

@TablaAnt varchar(50)

declare IndicesInactivos cursor for

 select Base, Tabla, Indice

  from Analisis

where Indice like ‘[[]IX%’

  group by Base, Tabla, Indice

  having sum(convert(money,replace(Uso,’,’,’.’))) = 0

open IndicesInactivos

fetch next from IndicesInactivos into @Base, @Tabla, @Indice

while (@@FETCH_STATUS <> -1)

begin

     if @Base <> @BaseAnt

     begin   

   Print ‘BASE: ‘ + @Base

     select @BaseAnt = @Base

    select @TablaAnt = ”

     end   

     if @Tabla <> @TablaAnt

    begin   

    Print ‘TABLA: ‘ + @Tabla

      Print ‘INDICES: ‘

    select @TablaAnt = @Tabla

   end  

      Print ‘    ‘ + @Indice

 fetch next from IndicesInactivos into @Base, @Tabla, @Indice

continue

end

close IndicesInactivos

deallocate IndicesInactivos

GO

Continues…

Leave a comment

Your email address will not be published.