Quero determinar o tamanho dos meus índices, eles são índices de chave primária. Isso acontece no cluster mysql, mas não acho que seja significativo.
88
Acho que é isso que você está procurando.
show table status from [dbname]
http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html
Estendendo a resposta de Vajk Hermecz.
É assim que você pode obter todos os tamanhos dos índices, em megabytes, sem o PRIMARY (que é a própria tabela), ordenados por tamanho.
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 size_in_mb DESC;
fonte
ORDER BY size_in_mb DESC;
:?Se você estiver usando tabelas InnoDB, poderá obter o tamanho dos índices individuais de
mysql.innodb_index_stats
. A estatística de 'tamanho' contém a resposta, em páginas, então você deve multiplicá-la pelo tamanho da página, que é 16K por padrão .select database_name, table_name, index_name, stat_value*@@innodb_page_size from mysql.innodb_index_stats where stat_name='size';
fonte
stat_value
já é multiplicado pelo tamanho da página, então a coluna dá o tamanho do índice em bytes.show table status from [dbname]
Ativado
MyISAM
, cada bloco de índice é4 KB
preenchido por uma páginafill_factor
com registros de índice, cada um contendokey length + 4
bytes.Fill factor
é normalmente2/3
Quanto a
InnoDB
, a tabela está sempre agrupada noPRIMARY KEY
, não háPRIMARY KEY
índice separadofonte
Aqui está uma adaptação de alguns dos itens acima para fornecer também a porcentagem do índice total da tabela que cada índice usou, espero que seja útil para alguém
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'
Saída de exemplo
Atenciosamente Liam
fonte
Usando phpMyAdmin, ao visualizar a estrutura da tabela, há um link Detalhes em algum lugar na parte inferior. Depois de clicar nele, ele mostrará o tamanho total dos índices que você tem na tabela onde está marcado o uso de espaço.
Eu não acho que ele mostra cada índice individualmente.
fonte
Neste artigo, determine como calcular o tamanho do índice. http://aadant.com/blog/2014/02/04/how-to-calculate-a-specific-innodb-index-size/
fonte
Da referência do MySQL 5.6
SELECT SUM(stat_value) pages, index_name, SUM(stat_value)*@@innodb_page_size size FROM mysql.innodb_index_stats WHERE table_name='t1' AND stat_name = 'size' GROUP BY index_name;
fonte