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_LENGTH
adalah panjang (atau ukuran) dari semua data dalam tabel (dalambytes
).INDEX_LENGTH
adalah 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.