【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って書いてあって何が入ってるか全然わからないんですけどね。 長い戦いになりそうだ。。。