Mysql 表基本信息保存在 information_schema.tables 中;
tables表结构如下:
+-----------------+---------------------+------+-----+---------+-------+
| Field
+-----------------+---------------------+------+-----+---------+-------+
| TABLE_CATALOG
| TABLE_SCHEMA
| TABLE_NAME
| TABLE_TYPE
| ENGINE
| VERSION
| ROW_FORMAT
| TABLE_ROWS
| AVG_ROW_LENGTH
| DATA_LENGTH
| MAX_DATA_LENGTH | bigint(21) unsigned | YES
| INDEX_LENGTH
| DATA_FREE
| AUTO_INCREMENT
| CREATE_TIME
| UPDATE_TIME
| CHECK_TIME
| TABLE_COLLATION | varchar(32)
| CHECKSUM
| CREATE_OPTIONS
| TABLE_COMMENT
+-----------------+---------------------+------+-----+---------+-------+
Data_length,index_length 分别保存了表 数据文件、索引文件的大小(按字节计算)。
1、查询数据库所占空间
SELECT CONCAT(TRUNCATE(SUM(data_length)/1024/1024,2),'MB') AS data_size,
CONCAT(TRUNCATE(SUM(max_data_length)/1024/1024,2),'MB') AS max_data_size,
CONCAT(TRUNCATE(SUM(data_free)/1024/1024,2),'MB') AS data_free,
CONCAT(TRUNCATE(SUM(index_length)/1024/1024,2),'MB') AS index_size
FROM information_schema.tables WHERE TABLE_SCHEMA = '数据库名';
2、查询表所占空间
SELECT CONCAT(TRUNCATE(SUM(data_length)/1024/1024,2),'MB') AS data_size,
CONCAT(TRUNCATE(SUM(max_data_length)/1024/1024,2),'MB') AS max_data_size,
CONCAT(TRUNCATE(SUM(data_free)/1024/1024,2),'MB') AS data_free,
CONCAT(TRUNCATE(SUM(index_length)/1024/1024,2),'MB') AS index_size
FROM information_schema.tables WHERE TABLE_NAME = '表名';