
MySQL、Doris、StarRocks使用sql获取表大小
Doris、StarRocks都是兼容MySQL语法,所以这里介绍的获取表大小的 sql ,在Doris、StarRocks也有效
MySQL获取表的大小信息,需要查询 information_schema 库的 tables 表,这个表存放了关于数据库中所有表的元数据信息,里面有很多字段,大致可以分成三个类型
表基础信息:
TABLE_CATALOG:表所属的目录
TABLE_SCHEMA:表所属的数据库名称
TABLE_NAME:表名
TABLE_TYPE:表的类型,常见的有BASE TABLE(基础表)、VIEW(视图)等
表结构信息:
ENGINE:表使用的存储引擎,比如InnoDB、MyISAM
VERSION:表的版本号
ROW_FORMAT:行格式,比如Compact、Dynamic等
TABLE_ROWS:表中的大致行数(有延迟)
AVG_ROW_LENGTH:平均每行数据的长度
DATA_LENGTH:表数据占用的字节数
MAX_DATA_LENGTH:表数据最大可能占用的字节数
INDEX_LENGTH:表索引占用的字节数
DATA_FREE:表中已分配但未使用的空间字节数
CREATE_TIME:表的创建时间
UPDATE_TIME:表的最后更新时间
CHECK_TIME:表的最后检查时间
TABLE_COLLATION:表的字符集和排序规则
CHECKSUM:表的校验和值
CREATE_OPTIONS:创建表时使用的其他选项
表权限信息:
GRANTOR:授予表权限的用户。
GRANT_DATE:权限授予的日期。
我们获取某个表的大小,取的就是 DATA_LENGTH 字段
SELECT table_name, data_length
FROM information_schema.tables
WHERE table_schema = '库名' AND table_name = '表名'
这个字段表示的是表的字节大小,如果想直接转成用户友好的显示方式(自动显示B、KB、MB、GB、TB),可以程序上自己转换,也可以在 sql 中将换好
SELECT table_name,
case
when data_length > 1099511627776 then concat(round(data_length / 1099511627776, 2), 'TB')
when data_length > 1073741824 then concat(round(data_length / 1073741824, 2), 'GB')
when data_length > 1048576 then concat(round(data_length / 1048576, 2), 'MB')
when data_length > 1024 then concat(round(data_length / 1024, 2), 'KB')
else concat(data_length, 'B')
end as data_length
FROM information_schema.tables
WHERE table_schema = '库名' AND table_name = '表名'