Voglio determinare la dimensione dei miei indici, sono indici di chiave primaria. Questo sembra essere sul cluster mysql ma non penso che sia significativo.
Risposte:
Penso che questo sia quello che stai cercando.
show table status from [dbname]
http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html
Estendendo la risposta di Vajk Hermecz.
In questo modo è possibile ottenere tutte le dimensioni degli indici, in megabyte, senza PRIMARIO (che è la tabella stessa), ordinate per dimensione.
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;:?
Se utilizzi tabelle InnoDB, puoi ottenere la dimensione per i singoli indici da mysql.innodb_index_stats. La statistica 'size' contiene la risposta, in pagine, quindi devi moltiplicarla per la dimensione della pagina, che è 16K per impostazione predefinita .
select database_name, table_name, index_name, stat_value*@@innodb_page_size
from mysql.innodb_index_stats where stat_name='size';
stat_valueè già moltiplicato per la dimensione della pagina, quindi la colonna fornisce la dimensione dell'indice in byte.
show table status from [dbname]
Sopra MyISAM ogni blocco di indice viene 4 KBriempita la pagina fill_factorcon record di indice, ciascuno della key length + 4lunghezza di byte.
Fill factor è normalmente 2/3
Per quanto riguarda InnoDB, la tabella è sempre raggruppata su PRIMARY KEY, non esiste un PRIMARY KEYindice separato
Ecco un adattamento da alcuni dei precedenti per darti anche la percentuale dell'indice totale per la tabella che ogni indice ha usato, si spera che questo sia utile per qualcuno
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'
Output di esempio
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
Saluti Liam
Utilizzando phpMyAdmin, quando si visualizza la struttura della tabella c'è un collegamento Dettagli in basso da qualche parte. Una volta cliccato su di esso, ti mostrerà la dimensione totale degli indici che hai sulla tabella dove è contrassegnato Space Usage.
Non credo che ti mostri ogni indice individualmente.
In questo articolo determinare come calcolare la dimensione dell'indice. 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;