Я хочу визначити розмір своїх індексів, це індекси первинного ключа. Це трапляється в кластері mysql, але я не думаю, що це суттєво.
Відповіді:
Я думаю, це те, що ви шукаєте.
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]
Ось адаптація з вищезазначеного, щоб також дати вам відсоток від загального індексу для таблиці, яку використовував кожен індекс, сподіваємось, це буде корисно для когось
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'
Приклад виводу
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
З повагою Ліам
Використовуючи phpMyAdmin, під час перегляду структури таблиці десь внизу є посилання Details. Після того, як ви натиснете на нього, він покаже вам загальний розмір індексів, які ви маєте в таблиці, де він позначений простором.
Я не думаю, що він показує вам кожен індекс окремо.
У цій статті визначте, як розрахувати розмір індексу. http://aadant.com/blog/2014/02/04/how-to-calculate-a-specific-innodb-index-size/
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;