旅するえんじにあ - Engineers to Travel -

旅するエンジニアの気まま備忘録

【MySQL】データベース内のテーブル容量を表示させるquery

今回はMySQLです。 そろそろ環境構築も落ち着いてきて、さてさてソースでも読もうかなって思っている時に、ソースだけじゃわからないようなレガシーなコードなわけですよ。 PHPなんですが$dataだったり、どういう値が入っているかコメントも書かれておらず、マジックナンバーガリガリな感じなんです。 そして併用するのがDB。 こちらについてはテーブル数が100ちょっとで使われてたり使われてなかったり。

直感的ではないプログラムはそんな好きじゃないです。

どのDB使われてるんだろう。 多分これだろうと思ってselectかけてみるもハズレ(ハズレってなんだ…)

そんな時たまに使うのがデータベースの容量からテーブルの容量を出力できるSQLなのです。

今回はどのテーブルにどのくらいの情報が入っているのかを確認するためのSQLになります。

とりあえず適当に作ってあったMySQLのDBはこんな感じです。

mysql> show tables;
+------------------+
| Tables_in_test2  |
+------------------+
| area_code        |
| detail_area_code |
| prefectural_code |
| shop_image       |
| shop_info        |
| test_table       |
| user             |
+------------------+
7 rows in set (0.00 sec)

この中で使っていないテーブがあるのです。

そんな時こんなコマンド打ちます。

select 
table_name, engine, table_rows as tbl_rows, avg_row_length as rlen, 
floor((data_length+index_length)/1024/1024) as allMB,  #総容量
floor((data_length)/1024/1024) as dMB,  #データ容量
floor((index_length)/1024/1024) as iMB   #インデックス容量
from information_schema.tables 
where table_schema=database() 
order by (data_length+index_length) desc;

このselect文を発行するとこんなのが返ってきます。

+------------------+--------+----------+------+-------+------+------+
| table_name       | engine | tbl_rows | rlen | allMB | dMB  | iMB  |
+------------------+--------+----------+------+-------+------+------+
| test_table       | InnoDB |        0 |    0 |     0 |    0 |    0 |
| user             | InnoDB |        4 | 4096 |     0 |    0 |    0 |
| shop_info        | InnoDB |        6 | 2730 |     0 |    0 |    0 |
| shop_image       | InnoDB |        0 |    0 |     0 |    0 |    0 |
| prefectural_code | InnoDB |       47 |  348 |     0 |    0 |    0 |
| detail_area_code | InnoDB |        2 | 8192 |     0 |    0 |    0 |
| area_code        | InnoDB |       68 |  240 |     0 |    0 |    0 |
+------------------+--------+----------+------+-------+------+------+
7 rows in set (0.04 sec)

データ少なすぎてMB単位の表示だと0になっちゃうのですが。。。

tbl_rowsは見れば分かる通りですね。 ここが0になっているテーブルはデータがないものです。

これがあればどのテーブルが使われていてどのテーブルが使われていないかすぐわかりますね。

実はわかったところまではよかったんですが、カラム名がvalueだとかdataって書いてあって何が入ってるか全然わからないんですけどね。 長い戦いになりそうだ。。。