有时候我们需要知道MySQL中某些表的数据量是多少,如果单个表,可以通过客户端查看表信息得到,但是要获取几十上百张表的时候,那就需要通过sql方式去查询了。在MySQL中有一个表information_schema的数据库,里面存的是MySQL的元数据,包括数据库信息、表信息、字段信息等等。
information_schema表结构
schemata表:数据库信息
tables表:表信息,包括每个表有多少个列等信息。
columns表:所有表中的表字段信息。
statistics表:索引信息。
user_privileges表:用户权限信息。
schema_privileges表:数据库权限。
table_privileges表:表权限。
column_privileges表:列权限信息。
character_sets表:字符集信息。
collations表:字符集对照信息。
collation_character_set_applicability表:相当于collations表和character_sets表的前两个字段的一个对比,记录了字符集之间的对照信息。
table_constraints表:用于记录表的描述存在约束的表和约束类型。
key_column_usage表:记录具有约束的列。
routines表:存储过程和函数的信息,不包含自定义的过程或函数信息。
views表:视图信息,需要有show view权限。
triggers表:触发器的信息,需要有super权限。
查询方式
-- 如果查询多个表,可以把table_name 条件改为in
use information_schema;
SELECT
DATA_LENGTH, -- 数据长度,单位字节
INDEX_LENGTH, -- 索引长度
CONCAT(ROUND(SUM(DATA_LENGTH/1024/1024),2),'M') AS 数据长度 -- 数据长度 转换为M,
FROM
information_schema.TABLES
WHERE
table_schema = 'test' -- 查询哪个数据库
AND table_name in ('test_data'); -- 查询数据库下到哪个表
参考链接:mysql查询表的数据大小