003-mysql查询表的数据大小、索引大小

在需要备份数据库里面的数据时,我们需要知道数据库占用了多少磁盘大小,可以通过一些sql语句查询到整个数据库的容量,也可以单独查看表所占容量。

1、查看数据库表 数据大小,索引大小

select 
concat(round(SUM(DATA_LENGTH / 1024 / 1024), 2), 'MB') AS DATA_SIZE, 
concat(round(SUM(INDEX_LENGTH / 1024 / 1024), 2), 'MB') AS INDEX_SIZE, 
concat(round(SUM(DATA_FREE / 1024 / 1024), 2), 'MB') AS DATA_FREE
from information_schema.tables 
where table_schema='库名';

2、查询数据库所有表数据,所有的数据大小

select concat(round(sum(DATA_LENGTH/1024/1024),2),'M') from information_schema.tables; -- 查询所有的数据大小

3、查询某个表的结构大小,行数

SELECT
    TABLE_NAME 表名,
    CONCAT(ROUND((DATA_LENGTH + INDEX_LENGTH)/1024/1024,2),'M') 表占用空间大小,
    TABLE_ROWS 数据行数
FROM
information_schema.TABLES
WHERE
TABLE_SCHEMA = 'copyright_pre' and TABLE_NAME='test_table_idx'
ORDER BY TABLE_ROWS desc

 不过需要注意的是,对于InnoDB表,table_rows行计数仅是大概估计值。

如果想要准确查询条数

select concat(
    'select "',
    TABLE_name, 
    '", count(*) from ', 
    TABLE_SCHEMA, 
    '.',
    TABLE_name,
    ' union all' 
)  as a  from information_schema.tables 
where TABLE_SCHEMA='数据库名';

将得到的sql 语句进行拼接查询即可,注意最后一个的union all

 select * from (

select "表名" tname, 总数 trows from 表名 union all --将第一行的 字段起一个别名 tname trows

......
) a order by trows desc 增加排序

 
原文地址:https://www.cnblogs.com/bjlhx/p/7339356.html