Conocer el tamaño de los índices de una tabla

Entre tantas consultas que se realizan a la base de datos a diario por allá alguien grita desesperadamente, “la generación del reporte X demora demasiado, crea un índice para ese reporte”, y como el jefe lo necesitaba para hace 30 minutos realizamos la susodicha con todos los campos del reporte y allí murió el asunto, luego de unas semanas o meses quizá estamos en nuestra labor de desarrolladores de bases de datos haciéndole un mantenimiento y nos acordamos de aquel indice que alguna vez creamos y piensas “Ese reporte se genero solo una vez y no se necesita mas, será que ocupa mucho espacio este índice?”, para conocer cuanto ocupa actualmente un indice utilizamos la siguiente consulta:

SELECT i.name as IndexName, (s.used_page_count * 8) / 1024.0 AS SizeInMb
FROM sys.dm_db_partition_stats AS s
	JOIN sys.indexes AS i
	ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
WHERE s.[object_id] = object_id('Person.Address')
ORDER BY i.name

Explicación

Estamos consultando de la tabla de sistema dm_db_partition_stat que almacena información estadística de las particiones que tengamos en nuestra BD, de alli tomamos cuantas paginas utiliza multiplicadas por 8 y divididas entre 1024 (recordemos que las paginas vienen en una unica presentacion de 8 Kb), hacemos INNER JOIN con la tabla de indices y de alli tomamos el nombre (Como crees que vamos a saberlo?, la tabla dm_db_partition_stat guarda solo el object_id) de ahi en adelante creo que esta en español y lo que nos arroja SQL Server es lo siguiente:

Obviamente en object_id(‘Person.Address’) colocas el nombre de la tabla a la cual le deseas conocer los tamaños de sus indices.

Happy coding!

Proco

Software engineer, Gamer, Husband.

Deja un comentario

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