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;
これは、テーブルのサイズだけでなく、テーブル名と関連付けられた親データベースも返します。
コメントを残す