处理数据库的时候,有时候需要知道表占用的空间大小。在MySQL里,DATA_LENGTH列提供了这个信息。不过在MySQL中,DATA_LENGTH通常是通过information_schema数据库的TABLES表来查看的。
查询表的数据长度
想要查看特定表的总数据长度,可以执行这样一个查询:
SELECT DATA_LENGTH
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'database_name' ANDTABLE_NAME = 'table_name';
把database_name换成数据库的名字,table_name换成表的名字。这条SQL语句会返回表的数据长度,单位是字节。
查看整个数据库的数据长度
有时还需要知道整个数据库占用的空间大小。下面这个查询提供了整个数据库的DATA_LENGTH总和:
SELECT SUM(DATA_LENGTH)
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'database_name';
这里database_name是目标数据库名字。这条查询会得到全部表的DATA_LENGTH之和,也就是整个数据库的数据占用空间。
数据长度和索引长度
除了数据长度,可能还想知道索引占用了多少空间。这里还有一个INDEX_LENGTH列,它也在information_schema.TABLES表里。要得到表的总长度(包括数据和索引),可以把DATA_LENGTH和INDEX_LENGTH加起来:
SELECT DATA_LENGTH + INDEX_LENGTH AStotal_length
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'database_name' ANDTABLE_NAME = 'table_name';
上面的total_length就是包含数据和索引的总长度。
高级:表空间使用率
有经验的用户可能还想知道表空间的使用率。表空间的使用率可以这么算:
SELECT
TABLE_NAME,
TABLE_ROWS,
DATA_LENGTH,
INDEX_LENGTH,
(DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 AS total_length_MB,
(DATA_FREE / 1024 / 1024) AS data_free_MB
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = 'database_name';
其中DATA_FREE指的是分配了还没用的空间,单位也是字节。这样查询出来的结果会给出每个表占用的数据长度、索引长度、总长度(转为了MB),以及未使用的空间(也是MB)。