Я хочу определить размер своих индексов, это индексы первичного ключа. Это происходит в кластере mysql, но я не думаю, что это важно.
88
Я думаю, это то, что вы ищете.
show table status from [dbname]
http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html
Расширение ответа Вайка Гермеча.
Вот как вы можете получить все размеры индексов в мегабайтах без ПЕРВИЧНОГО (то есть самой таблицы), упорядоченного по размеру.
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;
источник
ORDER BY size_in_mb DESC;
:?Если вы используете таблицы InnoDB, вы можете получить размер отдельных индексов из
mysql.innodb_index_stats
. Статистика «размер» содержит ответ в страницах, поэтому вам нужно умножить его на размер страницы, который по умолчанию составляет 16 КБ .select database_name, table_name, index_name, stat_value*@@innodb_page_size from mysql.innodb_index_stats where stat_name='size';
источник
stat_value
уже умножается на размер страницы, поэтому столбец дает размер индекса в байтах.show table status from [dbname]
Вкл.
MyISAM
, Каждый индексный блок - это4 KB
страница, заполненнаяfill_factor
индексными записями, каждая из которыхkey length + 4
длину в байтах.Fill factor
обычно2/3
Что касается
InnoDB
, таблица всегда кластеризована поPRIMARY KEY
, отдельногоPRIMARY KEY
индекса нетисточник
Вот адаптация из некоторых из вышеперечисленных, чтобы также дать вам процент от общего индекса для таблицы, который использовал каждый индекс, надеюсь, это будет полезно для кого-то
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'
Пример вывода
С уважением, Лиам
источник
Используя phpMyAdmin, при просмотре структуры таблицы где-то внизу есть ссылка Подробности. Как только вы нажмете на него, он покажет вам общий размер индексов, которые у вас есть в таблице, где он отмечен как «Использование пространства».
Я не думаю, что он показывает вам каждый индекс индивидуально.
источник
В этой статье определите, как рассчитать размер индекса. http://aadant.com/blog/2014/02/04/how-to-calculate-a-specific-innodb-index-size/
источник
Из справочника 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;
источник