mysql空间占用

发布于:2025-03-04 ⋅ 阅读:(63) ⋅ 点赞:(0)

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')中所有表占用的空间大小
SELECT
	table_name AS `Table`,
	( data_length + index_length ) / 1024 / 1024 AS `Size (MB)` 
FROM
	information_schema.TABLES 
WHERE
	table_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 按表名进行分组,由于我们只查询一个表,所以实际上就是统计该表的索引总大小。

网站公告

今日签到

点亮在社区的每一天
去签到