You need to enable JavaScript to run this app. 如何获取MySQL所有数据库的大小总和?
优惠活动
大模型
产品
解决方案
定价
更多

如何获取MySQL所有数据库的大小总和?

全数据库大小求和统计实现方案

完全兼容你原有计算逻辑的几种实现方式:

1. 直接查询全库总大小(最高效)

直接移除原有查询的分组逻辑,对所有表的大小字段做全局求和,换算规则、精度和你原有查询完全一致:

SELECT 
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Total Size (GB)" 
FROM information_schema.TABLES;

2. 基于现有单库统计结果二次求和

如果你需要沿用原有单库统计的逻辑,先算出每个库的大小再累加,用子查询嵌套即可:

SELECT 
ROUND(SUM(`Size (GB)`), 2) AS "Total Size (GB)"
FROM (
    SELECT 
    table_schema AS "Database", 
    ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (GB)" 
    FROM information_schema.TABLES 
    GROUP BY table_schema
) AS db_sizes;

3. 单库列表+合计行同步展示

如果想要在原有各库大小的结果末尾追加一行总计,直接用WITH ROLLUP实现分组汇总:

SELECT 
  IFNULL(table_schema, "TOTAL") AS "Database",
  ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (GB)" 
FROM information_schema.TABLES 
GROUP BY table_schema WITH ROLLUP;

执行后返回的最后一行Database为TOTAL的行就是所有库的大小总和。

注意事项

  • 所有写法都沿用了你原有查询的换算规则、小数位精度,计算出的总和和你现有各库大小的手动累加结果完全一致,不会出现数值偏差。
  • 换算规则提示:当前查询的换算式/ 1024 / 1024实际是将字节单位转换为MB,如果你需要真实的GB单位,需要将换算式修改为/ 1024 / 1024 / 1024。
  • 如果原有查询已经过滤了不需要统计的系统库(比如mysql、sys、information_schema等),需要在以上所有查询的FROM子句后追加相同的WHERE过滤条件,保证统计范围一致,例如:
    WHERE table_schema NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys')
    
  • 第一种写法省略了单库分组的中间计算,查询效率最高,适合只需要总大小的场景。
    内容的提问来源于stack exchange,提问作者Somethingwhatever
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 01:36:11