Seperti kebanyakan database relasional, MySQL menyediakan metadata yang berguna tentang database itu sendiri. Sementara sebagian besar database lain merujuk informasi ini sebagai catalog , dokumentasi resmi MySQL mengacu pada INFORMATION_SCHEMA metadata sebagai tables .
Terlepas dari namanya, yang penting adalah informasi yang diberikan oleh INFORMATION_SCHEMA ini tabel. Semuanya dari views dan user_privilieges ke columns dan tables dapat ditemukan di INFORMATION_SCHEMA . Untuk tujuan kami, kami sangat tertarik dengan tables metadata, yang dapat kita kueri untuk benar-benar mengekstrak ukuran berbagai tabel dalam sistem.
Mencantumkan Ukuran Tabel Dari Satu Database
Seperti yang dapat dilihat dalam dokumentasi resmi, INFORMATION_SCHEMA.TABLES tabel berisi sekitar 20 kolom, tetapi untuk tujuan menentukan jumlah ruang disk yang digunakan oleh tabel, kami akan fokus pada dua kolom khususnya:DATA_LENGTH dan INDEX_LENGTH .
DATA_LENGTHadalah panjang (atau ukuran) dari semua data dalam tabel (dalambytes).INDEX_LENGTHadalah panjang (atau ukuran) file indeks untuk tabel (juga dalambytes).
Berbekal informasi ini, kita dapat menjalankan kueri yang akan mencantumkan semua tabel dalam database tertentu bersama dengan ruang disk (ukuran) masing-masing. Kita bahkan bisa mendapatkan sedikit lebih bagus dan mengonversi nilai ukuran normal dari bytes menjadi sesuatu yang lebih berguna dan dapat dimengerti oleh kebanyakan orang seperti megabytes .
SELECT
TABLE_NAME AS `Table`,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "bookstore"
ORDER BY
(DATA_LENGTH + INDEX_LENGTH)
DESC;
Dalam contoh ini menggunakan bookstore database, kami menggabungkan DATA_LENGTH dan INDEX_LENGTH sebagai bytes , lalu bagi dengan 1024 dua kali untuk diubah menjadi kilobytes lalu megabytes . Kumpulan hasil kami akan terlihat seperti ini:
+----------------------------------+-----------+
| Table | Size (MB) |
+----------------------------------+-----------+
| book | 267 |
| author | 39 |
| post | 27 |
| cache | 24 |
...
Jika Anda tidak peduli dengan semua tabel dalam database dan hanya menginginkan ukuran tabel tertentu, Anda cukup menambahkan AND TABLE_NAME = "your_table_name" ke WHERE ayat. Disini kami hanya ingin informasi tentang book tabel:
SELECT
TABLE_NAME AS `Table`,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = "bookstore"
AND
TABLE_NAME = "book"
ORDER BY
(DATA_LENGTH + INDEX_LENGTH)
DESC;
Hasilnya, seperti yang diharapkan, sekarang:
+-------+-----------+
| Table | Size (MB) |
+-------+-----------+
| book | 267 |
+-------+-----------+
1 row in set (0.00 sec)
Mencantumkan Semua Ukuran Tabel Dari SEMUA Database
Jika Anda mengalami masalah di mana database Anda tumbuh dalam ukuran tetapi Anda tidak tahu tabel mana yang menjadi penyebabnya, mungkin berguna untuk menanyakan ukuran semua tabel dalam semua database di seluruh sistem. Ini dapat diselesaikan dengan mudah dengan kueri berikut:
SELECT
TABLE_SCHEMA AS `Database`,
TABLE_NAME AS `Table`,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`
FROM
information_schema.TABLES
ORDER BY
(DATA_LENGTH + INDEX_LENGTH)
DESC;
Ini tidak hanya akan mengembalikan ukuran tabel, tetapi juga nama tabel dan database induk yang terkait dengannya.