之前写了一篇关于查询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';