查看 MySQL 数据库中每个表占用的空间大小

本文将指导您如何使用MySQL查询指定数据库、实例以及表的大小,并提供详细步骤及示例代码。

1、进去指定schema 数据库(存放了其他的数据库的信息) 

mysql> use information_schema;
Database changed

2、查询所有数据的大小 

mysql> select concat(round(sum(DATA_LENGTH/1024/1024), 2), 'MB')
    -> as data from TABLES;
+-----------+
| data      |
+-----------+
| 6674.48MB |
+-----------+
1 row in set (16.81 sec)

3、查看指定数据库实例的大小,比如说数据库 test

mysql> select concat(round(sum(DATA_LENGTH/1024/1024), 2), 'MB')
    -> as data from TABLES where table_schema='test';
+-----------+
| data      |
+-----------+
| 6542.30MB |
+-----------+
1 row in set (7.47 sec)

4、查看指定数据库的表的大小,比如说数据库 test中的 user表 

mysql> select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data
    -> from TABLES where table_schema='test'
    -> and table_name='user';
+--------+
| data   |
+--------+
| 2.52MB |
+--------+
1 row in set (1.88 sec)


<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%的(可能需索引优化) - 记录行数异常增长的(需考虑数据归档)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值