MySQLでテーブルをサイズ順に一覧表示する方法
information_schema.tablesを使ったテーブルサイズの一覧取得
MySQLでは、information_schema.tablesを参照することで、データベース内のすべてのテーブルのサイズを簡単に確認できます。以下のSQL文を実行すると、テーブル名・推定行数・データ長・インデックス長に加えて、それらをMB単位に換算した合計サイズが、小さい順(昇順)に表示されます。
SELECT TABLE_NAME, table_rows, data_length, index_length, round(((data_length + index_length) / 1024 / 1024),2) "MB Size" FROM information_schema.TABLES WHERE table_schema = "yourDatabaseName" ORDER BY (data_length + index_length) ASC;
構文の各要素の意味
- TABLE_NAME:テーブルの名前
- table_rows:テーブルに格納されている行数の推定値
- data_length:データ領域のサイズ(バイト)
- index_length:インデックス領域のサイズ(バイト)
- round(...):データ長とインデックス長の合計を1024で2回割ってMBに換算し、小数点以下2桁に丸めています
- ORDER BY ... ASC:サイズの昇順(小さい順)でソートします。「ASC」を「DESC」に変更すれば、大きいテーブルから順に表示できます
実行例:testデータベースでの確認
それでは、実際に「test」データベースに対してこのクエリを実行してみましょう。
mysql> SELECT TABLE_NAME, table_rows, data_length, index_length,
-> round(((data_length + index_length) / 1024 / 1024),2) "MB Size"
-> FROM information_schema.TABLES WHERE table_schema = "test"
-> ORDER BY (data_length + index_length) ASC;実行結果は以下のようになり、テーブルがサイズの小さい順に並んで表示されます(出力は一部抜粋)。
+------------------------------------+------------+-------------+--------------+---------+ | TABLE_NAME | TABLE_ROWS | DATA_LENGTH | INDEX_LENGTH | MB Size | +------------------------------------+------------+-------------+--------------+---------+ | empinfoview | 0 | 0 | 0 | 0.00 | | lookuptable | 0 | 0 | 0 | 0.00 | | view_student | 0 | 0 | 0 | 0.00 | | empidandempname_view | 0 | 0 | 0 | 0.00 | | customers | 0 | 0 | 1024 | 0.00 | | addingcurrencysymboldemo | 4 | 16384 | 0 | 0.02 | | allrecordswithactive | 6 | 16384 | 0 | 0.02 | | bookdatedemo | 2 | 16384 | 0 | 0.02 | | employee | 2 | 16384 | 0 | 0.02 | | studenttable | 3 | 16384 | 0 | 0.02 | | ... | ... | ... | ... | ... | | constraintdemo | 0 | 16384 | 16384 | 0.03 | | insertignoredemo | 2 | 16384 | 16384 | 0.03 | | student | 2 | 16384 | 32768 | 0.05 | +------------------------------------+------------+-------------+--------------+---------+ 240 rows in set (22.56 sec)
補足:容量を消費しているテーブルを特定したい場合
ディスク容量を圧迫しているテーブルを調査したいときは、ORDER BY句を降順(DESC)に変更すると便利です。大きなテーブルから順に確認できます。
SELECT TABLE_NAME, round(((data_length + index_length) / 1024 / 1024),2) AS "Size (MB)" FROM information_schema.TABLES WHERE table_schema = "yourDatabaseName" ORDER BY (data_length + index_length) DESC;
なお、table_rowsの値は特にInnoDBテーブルの場合あくまで推定値であり、実際の正確な行数とは異なることがあります。厳密な行数が必要な場合は、別途 COUNT(*) を実行して確認してください。
-
mysql_upgradeとは?MySQLテーブルの確認とアップグレード方法を解説
本記事では、mysql_upgradeプログラムの役割と基本的な使い方についてわかりやすく解説します。 mysql_upgradeの用途 MySQLをバージョンアップするたびに、ユーザーはmysql_upgradeを実行する必要があります。このプログラムは、アップグレード後のMySQLサーバーとの非互換性(incompatibility)がないかをチェックします。 mysqlスキーマ内のシステムテーブルをアップグレードし、新しいバージョンで追加された権限や機能を利用できるようにします。 Performance Schemaおよびsysスキーマもアップグレードの対象です。 さらに、ユーザーが作
-
C++ STLのlist::empty()とlist::size()関数の使い方を徹底解説
C++ STLにおけるlist::empty()およびlist::size()関数の動作、構文、具体的な使用例について詳しく解説します。 STLにおけるlistとは? listは、シーケンス内の任意の位置で定数時間での挿入と削除を可能にするコンテナです。listは双方向リンクリストとして実装されており、非連続的なメモリ割り当てを行います。配列、vector、dequeと比較して、コンテナ内の任意の位置への要素の挿入・抽出・移動において優れたパフォーマンスを発揮します。一方で、要素への直接アクセス(ランダムアクセス)は遅いという特徴があります。listはforward_listと似ていますが、f