1、查询数据库占用空间
可以通过查询 information_schema
系统数据库中的 SCHEMATA
表和 TABLES
表来获取数据库占用的空间大小。
SELECT table_schema AS `数据库名称`,SUM(data_length + index_length) / 1024 / 1024 AS `占用空间(MB)`
FROM information_schema.TABLES
GROUP BY table_schema;
information_schema.TABLES
:这是 MySQL 系统数据库information_schema
中的一个表,它存储了所有数据库中表的元数据信息。data_length
:表示表的数据占用的字节数。index_length
:表示表的索引占用的字节数。SUM(data_length + index_length)
:计算表的数据和索引总共占用的字节数。/ 1024 / 1024
:将字节数转换为兆字节(MB)。GROUP BY table_schema
:按数据库名称进行分组,以便统计每个数据库的总空间占用。
2、查询表占用空间
同样可以使用 information_schema.TABLES
表来查询单个表或多个表占用的空间大小。
-- 查询指定数据库(例如 'test_db')中所有表占用的空间大小
SELECT table_name AS `Table`,(data_length + index_length) / 1024 / 1024 AS `Size (MB)`
FROM information_schema.TABLES
WHERE table_schema = 'snowy';
代码解释
table_name
:表示表的名称。(data_length + index_length) / 1024 / 1024
:计算表的数据和索引总共占用的兆字节数。WHERE table_schema = 'test_db'
:指定查询的数据库名称。AND table_name = 'test_table'
:指定查询的表名称。
降序查询
-- 查询指定数据库(例如 'test_db')中所有表占用的空间大小
SELECTtable_name AS `Table`,( data_length + index_length ) / 1024 / 1024 AS `Size (MB)`
FROMinformation_schema.TABLES
WHEREtable_schema = 'snowy'
ORDER BY`Size (MB)` DESC;
3、查询索引占用空间
可以通过查询 information_schema.STATISTICS
表来获取索引占用的空间大小。
-- 查询指定数据库(例如 'test_db')中指定表(例如 'test_table')的索引占用的空间大小
SELECT table_name,-- 这里因为只查一个表,所以索引总大小就代表该表所有索引的大小SUM(index_length) / 1024 / 1024 AS `Index Size (MB)`
FROM information_schema.TABLES
WHERE table_schema = 'snowy'AND table_name = 'sys_user'
GROUP BY table_name;
代码解释
- 表的选择:从
information_schema.TABLES
表中查询数据,该表包含了表的元数据信息,其中就有index_length
列用于表示索引占用的字节数。 - 筛选条件:
table_schema = 'snowy'
:指定要查询的数据库为snowy
。table_name = 'sys_user'
:指定要查询的表为sys_user
。
- 聚合计算:
SUM(index_length)
:对指定表的索引占用字节数进行求和。/ 1024 / 1024
:将字节数转换为兆字节(MB)。
- 分组:使用
GROUP BY table_name
按表名进行分组,由于我们只查询一个表,所以实际上就是统计该表的索引总大小。