How to Get the Size of the Table in MySQL
On 12月 17, 2021 by adminほとんどのリレーショナルデータベースと同様に、MySQLはデータベース自体に関する便利なメタデータを提供します。 他のほとんどのデータベースではこの情報を catalog
と呼んでいますが、MySQL の公式ドキュメントでは INFORMATION_SCHEMA
メタデータを tables
と呼んでいます。
名称に関係なく、重要なのはこれらの INFORMATION_SCHEMA
テーブルが提供する情報です。 views
および user_privilieges
から columns
および tables
まで、すべてが INFORMATION_SCHEMA
で見つかります。 このメタデータは、システム内のさまざまなテーブルのサイズを実際に抽出するためにクエリできます。
List Table Sizes From a Single Database
公式ドキュメントにあるように、INFORMATION_SCHEMA.TABLES
テーブルには約 20 の列がありますが、テーブルが使用するディスク容量を判断するために、特に 2 つの列に注目することにします。
-
DATA_LENGTH
はテーブル内のすべてのデータの長さ (またはサイズ) (bytes
単位)、 -
INDEX_LENGTH
はテーブルのインデックス ファイルの長さ (またはサイズ) (bytes
単位)、
この情報で武装し、特定のデータベース内のすべてのテーブルと、それぞれのディスク容量 (サイズ) をリストする問い合わせを行うことができます。 さらに、少し気難しくなって、bytes
の通常のサイズ値を megabytes
のように多くの人にとってより便利でわかりやすいものに変換することもできます。
SELECT TABLE_NAME AS `Table`, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`FROM information_schema.TABLESWHERE TABLE_SCHEMA = "bookstore"ORDER BY (DATA_LENGTH + INDEX_LENGTH)DESC;
この例では bookstore
データベースを使って、DATA_LENGTH
および INDEX_LENGTH
を bytes
として組み合わせ、1024
で 2 回分割して kilobytes
および megabytes
へ変換しています。 結果セットは次のようになります。
+----------------------------------+-----------+| Table | Size (MB) |+----------------------------------+-----------+| book | 267 || author | 39 || post | 27 || cache | 24 |...
データベース内のすべてのテーブルについて関心がなく、特定のテーブルのサイズだけが必要な場合は、WHERE
節に AND TABLE_NAME = "your_table_name"
を追加するだけでよいのです。 ここでは、book
テーブルに関する情報のみが必要です:
SELECT TABLE_NAME AS `Table`, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`FROM information_schema.TABLESWHERE TABLE_SCHEMA = "bookstore" AND TABLE_NAME = "book"ORDER BY (DATA_LENGTH + INDEX_LENGTH)DESC;
結果は予想通り、次のようになりました。
+-------+-----------+| Table | Size (MB) |+-------+-----------+| book | 267 |+-------+-----------+1 row in set (0.00 sec)
List All Table Sizes From ALL Databases
データベースのサイズが大きくなっているが、どのテーブルが原因であるかがわからない場合、システム全体のすべてのデータベース内のすべてのテーブル サイズを照会すると便利な場合があります。 これは、次のクエリで簡単に実現できます。
SELECT TABLE_SCHEMA AS `Database`, TABLE_NAME AS `Table`, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)`FROM information_schema.TABLESORDER BY (DATA_LENGTH + INDEX_LENGTH)DESC;
これは、テーブルのサイズだけでなく、テーブル名と関連付けられた親データベースも返します。
コメントを残す