 
            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 = '表名'