Mysql统计空间增量实现方式

 更新时间:2026年05月09日 16:07:53   作者:xixingzhe2  
本文介绍了三种统计数据库每月新增空间总量的方法,包括统计所有库、指定库以及按修改时间统计,文中说明了data_length和index_length字段的意义,并推荐使用update_time进行统计,以上为个人观点,仅供参考

1、统计【所有库】每月新增空间总量

SELECT
    DATE_FORMAT(create_time, '%Y-%m') AS 月份,
    ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 新增总空间_MB,
    ROUND(SUM(data_length + index_length) / 1024 / 1024 / 1024, 2) AS 新增总空间_GB
FROM
    information_schema.tables
WHERE
    table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys') -- 排除系统库
    AND create_time IS NOT NULL -- 只统计有创建时间的表
GROUP BY
    DATE_FORMAT(create_time, '%Y-%m')
ORDER BY
    月份 DESC;

2、统计【指定库】每月新增空间

your_database 换成你的数据库名即可:

SELECT
    DATE_FORMAT(create_time, '%Y-%m') AS 月份,
    ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 新增空间_MB,
    ROUND(SUM(data_length + index_length) / 1024 / 1024 / 1024, 2) AS 新增空间_GB
FROM
    information_schema.tables
WHERE
    table_schema = 'your_database' -- 替换成你的库名
    AND create_time IS NOT NULL
GROUP BY
    DATE_FORMAT(create_time, '%Y-%m')
ORDER BY
    月份 DESC;

3、更精准:按【修改时间】统计每月增量(推荐)

create_time 是表创建时间,实际业务中更应该用 update_time(表最后修改时间) 代表每月数据增长:

SELECT
    DATE_FORMAT(update_time, '%Y-%m') AS 月份,
    ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 当月总占用_MB,
    ROUND(SUM(data_length + index_length) / 1024 / 1024 / 1024, 2) AS 当月总占用_GB
FROM
    information_schema.tables
WHERE
    table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys')
    AND update_time IS NOT NULL
GROUP BY
    DATE_FORMAT(update_time, '%Y-%m')
ORDER BY
    月份 DESC;

4、字段含义

  • data_length:数据文件大小
  • index_length:索引文件大小
  • data_length + index_length = 表总空间
  • create_time:表创建时间
  • update_time:表最后数据更新时间

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

最新评论