背景
之前写了一篇关于查询PostgreSql数据库中表基础信息的文章,
其中关于表数据长度用到了一个pg_size_pretty函数
(可以将结果格式化成一种人类易读的格式,根据情况使用字节、kB、MB、GB 或者 TB),
记录下如何在mysql中实现类似效果。
获取表数据长度
查询bigdata-app这个库中所有数据长度
SELECT
TABLE_NAME,
CASE
WHEN DATA_LENGTH > 1 << 30 THEN
CONCAT(ROUND( DATA_LENGTH / ( 1 << 30 ), 2 ),' GB')
WHEN DATA_LENGTH > 1 << 20 THEN
CONCAT(ROUND( DATA_LENGTH / ( 1 << 20 ), 2 ),' MB')
WHEN DATA_LENGTH > 1 << 10 THEN
CONCAT(ROUND( DATA_LENGTH / ( 1 << 10 ), 2 ),' kB')
ELSE CONCAT(DATA_LENGTH,' bytes')
END len
FROM
information_schema.`TABLES`
WHERE
TABLE_SCHEMA = 'bigdata-app';
获取表详细信息
包括表名称,所属数据库,表占用空间大小,注释,创建时间等信息。
SELECT
TABLE_NAME,
TABLE_SCHEMA,
CASE
WHEN DATA_LENGTH > 1 << 30 THEN
CONCAT(ROUND( DATA_LENGTH / ( 1 << 30 ), 2 ),' GB')
WHEN DATA_LENGTH > 1 << 20 THEN
CONCAT(ROUND( DATA_LENGTH / ( 1 << 20 ), 2 ),' MB')
WHEN DATA_LENGTH > 1 << 10 THEN
CONCAT(ROUND( DATA_LENGTH / ( 1 << 10 ), 2 ),' kB')
ELSE CONCAT(DATA_LENGTH,' bytes')
END,
TABLE_COMMENT,
CREATE_TIME
FROM
information_schema.`TABLES`
WHERE
TABLE_SCHEMA = 'bigdata-app';
获取表字段详细信息
包括字段名称,注释,类型,长度,是否为主键等信息。
SELECT
COLUMN_NAME,
COLUMN_COMMENT,
DATA_TYPE,
REPLACE ( REPLACE ( SUBSTR( COLUMN_TYPE, POSITION( '(' IN COLUMN_TYPE )), '(', '' ), ')', '' ),
IF
( COLUMN_KEY = 'PRI', 1, 0 )
FROM
information_schema.`COLUMNS`
WHERE
TABLE_SCHEMA = 'bigdata-app'
AND table_name = 'app_ds_connect';