MySQL数据库实现统计所有表的空间占用与行数
作者:清山博客
这篇文章主要为大家详细介绍了MySQL数据库实现统计所有表的空间占用与行数的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
查看某个数据库中所有表的空间与行数统计
SELECT
TABLE_NAME AS `表名`,
TABLE_ROWS AS `行数`,
ROUND(DATA_LENGTH / 1024 / 1024, 2) AS `数据大小(MB)`,
ROUND(INDEX_LENGTH / 1024 / 1024, 2) AS `索引大小(MB)`,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS `总占用空间(MB)`,
ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 / 1024, 2) AS `总占用空间(GB)`
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = 'your_database_name' -- 替换为你的数据库名
ORDER BY
(DATA_LENGTH + INDEX_LENGTH) DESC;执行结果

查看某个数据库总空间占用情况
SELECT
TABLE_SCHEMA AS `数据库名`,
SUM(TABLE_ROWS) AS `总行数`,
ROUND(SUM(DATA_LENGTH) / 1024 / 1024, 2) AS `数据总大小(MB)`,
ROUND(SUM(INDEX_LENGTH) / 1024 / 1024, 2) AS `索引总大小(MB)`,
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_name'
GROUP BY
TABLE_SCHEMA;执行结果

知识扩展
统计数据库下所有表的数据行数
刚开始统计数据库中有多少行数据的时候,使用 information_schema.TABLES 去统计发现误差很大 ,具体原因这里不再说明
select table_schema as '数据库', table_name as '表名', table_comment as '表注释', table_rows as '记录数', truncate(data_length/1024/1024, 2) as '数据容量(MB)', truncate(index_length/1024/1024, 2) as '索引容量(MB)' from information_schema.tables where table_schema='test' order by table_rows desc, index_length desc;
以下是另一个方法:
执行sql,生成所有表的统计语句
select concat(
'select "',
TABLE_name,
'", count(*) as t from `',
TABLE_SCHEMA,
'`.`',
TABLE_name,
'` union all'
) from information_schema.tables
-- 排除指定库
where
table_schema not in('mysql','information_schema','performance_schema','sys');
结果如下:

查询出来的结果拷贝出来,去掉最后一行的 union all

汇总

到此这篇关于MySQL数据库实现统计所有表的空间占用与行数的文章就介绍到这了,更多相关MySQL统计表空间占用与行数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
