2009-04-23 38 views

Respuesta

65

Creo que esto es lo que estás buscando.

show table status from [dbname] 

http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html

+3

¿Data_length informado por este comando en Bytes? –

+2

Avg_row_length, Data_length, Max_data_length, Index_length, Data_free se informan en bytes, sí. –

+10

Esto da el tamaño del índice * total *, no un tamaño por índice (suponiendo que una tabla tenga índices múltiples). – Sai

3

No utilizado por mí, pero tal vez MySQL Index Analyzer puede ser útil.

+1

No downvote, pero por alguna razón no funciona para calcular el tamaño de los índices de clave principal en el grupo de –

4

En MyISAM, cada bloque índice es 4 KB página llena hasta fill_factor con registros del índice, siendo cada key length + 4 bytes de longitud.

Fill factor es normalmente 2/3

cuanto a InnoDB, la tabla está siempre agrupado en la PRIMARY KEY, no hay separada PRIMARY KEY índice

2

Usando phpMyAdmin, cuando se ve la estructura de la tabla hay un enlace Detalles en el abajo en alguna parte Una vez que haga clic en él, le mostrará el tamaño total de los índices que tiene en la tabla donde está marcado como Uso del espacio.

No creo que muestre cada índice individualmente.

+0

Con phpMyAdmin que es realmente fácil. ¡Gracias! – MrFabio

20

Si está utilizando tablas InnoDB, puede obtener el tamaño para índices individuales de mysql.innodb_index_stats. La estadística de 'tamaño' contiene la respuesta, en páginas, por lo que debe multiplicarla por el tamaño de página, which is 16K by default.

select database_name, table_name, index_name, stat_value*@@innodb_page_size 
from mysql.innodb_index_stats where stat_name='size'; 
+0

Fantástico. ¡Exactamente lo que estaba buscando! –

+1

Para aclarar: con esta consulta, 'stat_value' ya está multiplicado por el tamaño de página, por lo que la columna proporciona el tamaño del índice en bytes. –

+0

Gracias, mucho mejor que la respuesta aceptada. Una nota para otros noobs como yo - database_name, table_name y index_name no deben ser reemplazados por el nombre real de la base de datos y el nombre de la tabla;) en su lugar, el comando debe usarse exactamente como está. – middlehut

18

Extendiendo la respuesta de Vajk Hermecz.
Así es como puede obtener todos los tamaños de índice, en megabytes, sin el PRIMARIO (que es la tabla en sí), ordenados por tamaño.

SELECT database_name, table_name, index_name, 
round(stat_value*@@innodb_page_size/1024/1024, 2) size_in_mb 
FROM mysql.innodb_index_stats 
WHERE stat_name = 'size' AND index_name != 'PRIMARY' 
ORDER BY 4 DESC; 
+0

¿Por qué ORDER BY 4? – Alex

+0

@Alex lo ordena por 4to campo, que es el tamaño. es decir, muestra la tabla más grande primero, la última más pequeña –

Cuestiones relacionadas