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