Pregunta Cómo averiguar el tamaño de los índices en MySQL


Quiero determinar el tamaño de mis índices, son índices de clave primaria. Esto sucede que está en el clúster mysql, pero no creo que eso sea significativo.


52
2018-04-23 14:05


origen


Respuestas:


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


73
2017-09-22 17:06



Si está utilizando tablas InnoDB, puede obtener el tamaño para índices individuales 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, que es 16K por defecto.

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

23
2017-10-23 00:06



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í), ordenado 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;

22
2018-04-12 12:49



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

Fill factor es normalmente 2/3

Como para InnoDB, la tabla siempre está agrupada en el PRIMARY KEY, no hay separacion PRIMARY KEY índice


4
2018-04-23 14:21



No utilizado por mí, pero tal vez Analizador de índices MySQL puede ser útil.


3
2018-04-23 14:07



Usando phpMyAdmin, al ver la estructura de la tabla hay un enlace de Detalles en la parte inferior 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.

Sin embargo, no creo que te muestre cada índice individualmente.


2
2018-04-23 14:22



En este artículo, determine cómo calcular el tamaño del índice. http://aadant.com/blog/2014/02/04/how-to-calculate-a-specific-innodb-index-size/


2
2018-04-04 06:08



Aquí hay una adaptación de algunos de los anteriores para también darle el porcentaje del índice total de la tabla que cada índice ha usado, con suerte esto será útil para alguien

select 
    database_name, 
    table_name, 
    index_name, 
    round((stat_value*@@innodb_page_size)/1024/1024, 2) SizeMB, 
    round(((100/(SELECT INDEX_LENGTH FROM INFORMATION_SCHEMA.TABLES t WHERE t.TABLE_NAME = iis.table_name and t.TABLE_SCHEMA = iis.database_name))*(stat_value*@@innodb_page_size)), 2) `Percentage`
from mysql.innodb_index_stats iis 
where stat_name='size' 
and table_name = 'TargetTable'
and database_name = 'targetDB'

Ejemplo de salida

database_name   table_name  index_name  SizeMB  Percentage
targetDB        TargetTable id          10      55.55
targetDB        TargetTable idLookup    5       27.77
targetDB        TargetTable idTest      3       16.66

Saludos Liam


0
2018-05-22 13:02