Chcę określić rozmiar moich indeksów, są to indeksy klucza podstawowego. Dzieje się tak w klastrze mysql, ale nie sądzę, żeby to miało znaczenie.
88
Myślę, że właśnie tego szukasz.
show table status from [dbname]
http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html
Rozszerzam odpowiedź Vajka Hermecza.
W ten sposób można uzyskać rozmiar wszystkich indeksów, w megabajtach, bez elementu PRIMARY (czyli samej tabeli), uporządkowanych według rozmiaru.
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;
źródło
ORDER BY size_in_mb DESC;
:?Jeśli używasz tabel InnoDB, możesz pobrać rozmiar poszczególnych indeksów z
mysql.innodb_index_stats
. Statystyka „rozmiaru” zawiera odpowiedź w stronach, więc musisz ją pomnożyć przez rozmiar strony, który domyślnie wynosi 16 KB .select database_name, table_name, index_name, stat_value*@@innodb_page_size from mysql.innodb_index_stats where stat_name='size';
źródło
stat_value
jest już pomnożona przez rozmiar strony, więc kolumna podaje rozmiar indeksu w bajtach.show table status from [dbname]
W przypadku
MyISAM
każdego bloku indeksu4 KB
strona jest wypełnionafill_factor
rekordami indeksu, z których każdy makey length + 4
długość bajtów.Fill factor
jest normalnie2/3
Jeśli chodzi o
InnoDB
tabelę, jest ona zawsze skupiona naPRIMARY KEY
, nie ma oddzielnegoPRIMARY KEY
indeksuźródło
Oto adaptacja niektórych z powyższych, aby również podać procent całkowitego indeksu dla tabeli, z którego korzystał każdy indeks, mam nadzieję, że przyda się to komuś
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'
Przykładowe dane wyjściowe
Pozdrawiam Liam
źródło
Używając phpMyAdmin, podczas przeglądania struktury tabeli, gdzieś na dole znajduje się link Szczegóły. Po kliknięciu wyświetli się całkowity rozmiar indeksów, które masz w tabeli, w której jest zaznaczone użycie miejsca.
Nie sądzę jednak, aby wyświetlał każdy indeks indywidualnie.
źródło
W tym artykule określ, jak obliczyć rozmiar indeksu. http://aadant.com/blog/2014/02/04/how-to-calculate-a-specific-innodb-index-size/
źródło
Z referencji 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;
źródło