Saya ingin menentukan ukuran indeks saya, mereka adalah indeks kunci utama. Ini kebetulan berada di cluster mysql tetapi saya tidak berpikir itu signifikan.
88
Saya pikir inilah yang Anda cari.
show table status from [dbname]
http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html
Memperluas jawaban Vajk Hermecz.
Ini adalah bagaimana Anda bisa mendapatkan semua ukuran indeks, dalam megabyte, tanpa PRIMARY (yang merupakan tabel itu sendiri), diurutkan berdasarkan ukuran.
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;
sumber
ORDER BY size_in_mb DESC;
:?Jika Anda menggunakan tabel InnoDB, Anda bisa mendapatkan ukuran untuk masing-masing indeks dari
mysql.innodb_index_stats
. Stat 'size' berisi jawabannya, dalam halaman, jadi Anda harus mengalikannya dengan ukuran halaman, yaitu 16K secara default .select database_name, table_name, index_name, stat_value*@@innodb_page_size from mysql.innodb_index_stats where stat_name='size';
sumber
stat_value
itu sudah dikalikan dengan ukuran halaman, sehingga kolom memberikan ukuran indeks dalam byte.show table status from [dbname]
Pada
MyISAM
, setiap blok indeks adalah4 KB
halaman yang diisifill_factor
dengan catatan indeks, masing-masingkey length + 4
panjangnya byte.Fill factor
biasanya2/3
Adapun
InnoDB
, tabel selalu berkerumun di atasPRIMARY KEY
, tidak adaPRIMARY KEY
indeks terpisahsumber
Berikut ini adalah adaptasi dari beberapa hal di atas juga untuk memberikan anda persentase dari total index untuk tabel yang telah digunakan masing-masing index, semoga bermanfaat bagi sobat.
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'
Contoh keluaran
Salam Liam
sumber
Menggunakan phpMyAdmin, saat melihat struktur tabel ada tautan Detail di suatu tempat di bawah. Setelah Anda mengkliknya, itu akan menunjukkan kepada Anda ukuran total indeks yang Anda miliki di tabel yang ditandai Penggunaan Ruang.
Saya tidak berpikir itu menunjukkan kepada Anda setiap indeks secara individual.
sumber
Pada artikel ini tentukan cara menghitung ukuran indeks. http://aadant.com/blog/2014/02/04/how-to-calculate-a-specific-innodb-index-size/
sumber
Dari referensi 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;
sumber