MySQL 5.7实现Oracle COMPUTE SUM OF等效功能:统计Schema及总大小
MySQL 5.7 统计各Schema大小及总大小的方案
在MySQL 5.7里没有Oracle的COMPUTE SUM OF语法,但可以通过以下两种方案实现需求:
方案一:使用GROUP BY WITH ROLLUP(推荐)
这个语法会自动在分组结果末尾生成汇总行,是最简洁的实现方式:
SELECT IFNULL(table_schema, 'Total') AS `DB Name`, ROUND(SUM(data_length + index_length) / 1024 / 1024, 1) AS `DB Size in MB` FROM information_schema.tables GROUP BY table_schema WITH ROLLUP;
- 效果:结果最后一行的
DB Name显示为Total,对应的数值就是所有Schema的总大小 - 可选优化:如果不想统计系统自带Schema(比如
mysql、information_schema),可以添加过滤条件:SELECT IFNULL(table_schema, 'Total') AS `DB Name`, ROUND(SUM(data_length + index_length) / 1024 / 1024, 1) AS `DB Size in MB` FROM information_schema.tables WHERE table_schema NOT IN ('mysql', 'information_schema', 'performance_schema') GROUP BY table_schema WITH ROLLUP;
方案二:使用UNION ALL手动拼接总行
如果需要更灵活控制结果逻辑,可以用UNION ALL把单个Schema统计结果和总统计结果拼接:
-- 单个Schema大小统计 SELECT table_schema AS `DB Name`, ROUND(SUM(data_length + index_length) / 1024 / 1024, 1) AS `DB Size in MB` FROM information_schema.tables GROUP BY table_schema UNION ALL -- 总大小统计 SELECT 'Total' AS `DB Name`, ROUND(SUM(data_length + index_length) / 1024 / 1024, 1) AS `DB Size in MB` FROM information_schema.tables;
- 注意:两次查询的列数、列类型必须完全一致,否则会报错;同样可以给两个查询都加上
WHERE条件过滤系统Schema。
内容的提问来源于stack exchange,提问作者Jes Challand
相关产品推荐
相关产品推荐

