MySQL查看库、表、索引的大小

MySQL中有一个库information_schema,该库记录了很多mysql本身的信息,其中有一个表TABLES就记录了每个表占用的空间、表记录的行数等信息。
这个表主要字段分别是:
1、TABLE_SCHEMA : 数据库名
2、TABLE_NAME:表名
3、ENGINE:所使用的存储引擎
4、TABLES_ROWS:记录数
5、DATA_LENGTH:数据大小
6、INDEX_LENGTH:索引大小
其他字段请参考MySQL的手册,查看一个表占用空间的大小,那就相当于是 数据大小 + 索引大小 。

1、切换库

1
2
mysql> use information_schema;
Database changed

2、查看指定库中各表的大小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> SELECT table_name,concat(round(DATA_LENGTH/1024/1024,2),'MB') AS DATA  FROM TABLES WHERE table_schema='table_test';

+------------------------------------+------------+
| table_name | DATA |
+------------------------------------+------------+
| ad_xxx_area_report | 7911.75MB |
| ad_xxx_freq_report | 115.48MB |
| ad_xxx_frequency | 0.02MB |
| ad_xxx_info | 0.14MB |
| ad_xxx_limit_flow | 0.17MB |
| ad_xxx_report | 3176.78MB |
| ad_xxx_superscript | 0.08MB |
| ad_xxx_standard | 0.02MB |
| ad_xxx_standard_element | 0.05MB |
| ad_xxx_template | 0.02MB |
+------------------------------------+------------+

3、查看指定库中各表索引的大小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> SELECT table_name,concat(round(INDEX_LENGTH/1024/1024,2),'MB') AS DATA  FROM TABLES WHERE table_schema='table_test';

+------------------------------------+------------+
| table_name | DATA |
+------------------------------------+------------+
| ad_xxx_area_report | 7911.75MB |
| ad_xxx_freq_report | 115.48MB |
| ad_xxx_frequency | 0.02MB |
| ad_xxx_info | 0.14MB |
| ad_xxx_limit_flow | 0.17MB |
| ad_xxx_report | 3176.78MB |
| ad_xxx_superscript | 0.08MB |
| ad_xxx_standard | 0.02MB |
| ad_xxx_standard_element | 0.05MB |
| ad_xxx_template | 0.02MB |
+------------------------------------+------------+