如何查看mysql数据库各个表数据占用空间大小?

本文介绍如何使用MySQL的information_schema库来查询特定数据库下的所有表的信息,包括表名称、记录数、数据大小等,并提供了查询语句及结果示例。

首先进入mysql数据库

打开information_schema这个库

找到tables 这张表,如下图所示:
在这里插入图片描述
– 查询所有库的信息

select * from information_schema.tables;

通常情况下,只需要 当前库的数据的大小,因此要知道下面的字段的含义

table_schema 库名

table_name : table_schema库下对应的表名

engine: 表的引擎

version: 当前版本

table_rows: table_name表对应的记录数

data_length: 数据大小

index_length: 索引结构大小(两者加起来是总数据空间的容量 data_length + index_length)

table_collation: 字符校对集

因此 查询 库名 为 db_test 下的所有表的信息

SELECT table_name, data_length + index_length AS len, table_rows,
 
     CONCAT(ROUND((data_length + index_length)/1024/1024,2),'MB') AS datas
 
FROM information_schema.tables
 
WHERE table_schema = 'db_case'
 
ORDER BY len DESC;

结果如下图所示
在这里插入图片描述

<think>我们被要求提供查看MySQL数据库每个数据大小的方法。根据用户提供的引用,我们可以汇总出几种不同的SQL查询方法。 引用[2]提供了一种查询各个数据库数据量和大小的方法,但我们需要的是每个大小。 引用[3]和引用[4]提供了针对特定数据库和特定的查询方法。 用户的需求是:查看MySQL数据库每个数据大小。 我们可以通过查询information_schema数据库中的TABLES来获取每个大小信息。具体来说,我们可以使用以下方法: 方法1:查询指定数据库中所有大小(包括数据和索引大小) SELECT TABLE_NAME AS '名', ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS '总大小(MB)', ROUND(DATA_LENGTH / 1024 / 1024, 2) AS '数据大小(MB)', ROUND(INDEX_LENGTH / 1024 / 1024, 2) AS '索引大小(MB)', TABLE_ROWS AS '记录数' FROM information_schema.TABLES WHERE TABLE_SCHEMA = '你的数据库名' ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC; 方法2:如果想查看所有数据库的所有大小(注意这可能返回大量数据): SELECT TABLE_SCHEMA AS '数据库名', TABLE_NAME AS '名', ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS '总大小(MB)', ROUND(DATA_LENGTH / 1024 / 1024, 2) AS '数据大小(MB)', ROUND(INDEX_LENGTH / 1024 / 1024, 2) AS '索引大小(MB)', TABLE_ROWS AS '记录数' FROM information_schema.TABLES ORDER BY TABLE_SCHEMA, (DATA_LENGTH + INDEX_LENGTH) DESC; 注意:TABLE_ROWS是的行数估计值(对于InnoDB,它是近似值)。 另外,引用[3]中提供了查询单个的总索引大小,我们可以扩展为查询每个。 下面我们将按照用户的要求,给出详细的步骤和示例。 </think>### 查看MySQL数据库每个数据大小的方法 以下是基于`information_schema`系统数据库的查询方法,可精确获取每个数据大小、索引大小及总空间占用: #### 方法1:查询单个数据库的所有大小 ```sql SELECT TABLE_NAME AS '名', CONCAT(ROUND(DATA_LENGTH/(1024*1024), 2), ' MB') AS '数据大小', CONCAT(ROUND(INDEX_LENGTH/(1024*1024), 2), ' MB') AS '索引大小', CONCAT(ROUND((DATA_LENGTH + INDEX_LENGTH)/(1024*1024), 2), ' MB') AS '总占用空间', TABLE_ROWS AS '记录行数' FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'your_database_name' -- 替换为实际数据库名 ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC; ``` **输出示例:** ``` | 名 | 数据大小 | 索引大小 | 总占用空间 | 记录行数 | |------------|----------|----------|--------------|----------| | cdr | 1250.75 MB | 320.10 MB | 1570.85 MB | 8500000 | | statistics | 430.20 MB | 110.50 MB | 540.70 MB | 1200000 | | ... | ... | ... | ... | ... | ``` #### 方法2:查询所有数据库大小分布 ```sql SELECT TABLE_SCHEMA AS '数据库名', TABLE_NAME AS '名', CONCAT(ROUND(SUM(DATA_LENGTH)/(1024*1024), 2), ' MB') AS '数据大小', CONCAT(ROUND(SUM(INDEX_LENGTH)/(1024*1024), 2), ' MB') AS '索引大小' FROM information_schema.TABLES GROUP BY TABLE_SCHEMA, TABLE_NAME ORDER BY SUM(DATA_LENGTH + INDEX_LENGTH) DESC; ``` #### 关键说明 1. **核心字段** - `DATA_LENGTH`:数据占用空间(字节) - `INDEX_LENGTH`:索引占用空间(字节) - `TABLE_ROWS`:内记录行数(InnoDB引擎为估值)[^2] 2. **单位换算** 使用公式将字节转换为MB: $$ \text{MB} = \frac{\text{字节数}}{1024 \times 1024} $$ 3. **精确性提示** - MyISAM:`TABLE_ROWS` 值为精确计数 - InnoDB:`TABLE_ROWS` 值为统计估算值(实际行数需用`SELECT COUNT(*)`)[^3] #### 操作建议 1. 连接MySQL:`mysql -u root -p` 2. 执行查询后,重点关注: - 总空间超过500MB的 - 索引空间占比超过30%的(可能需索引优化) - 记录行数异常增长的(需考虑数据归档)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值