Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara Mendapatkan Ukuran Tabel di MySQL

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 (dalam bytes ).
  • INDEX_LENGTH adalah panjang (atau ukuran) file indeks untuk tabel (juga dalam bytes ).

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MASUKKAN KE ... PILIH DARI ... PADA PEMBARUAN KUNCI DUPLICATE

  2. Cara Menginstal WordPress:Perangkat Lunak Server

  3. Beberapa pernyataan pilih dalam permintaan tunggal

  4. Bagaimana cara mengubah waktu ke zona waktu perangkat iPhone?

  5. Mana yang tercepat? PILIH SQL_CALC_FOUND_ROWS FROM `table`, atau SELECT COUNT(*)