mysql数据库查询库/表的占用存储硬盘空间

本文介绍了一种使用SQL查询来获取数据库中各表的记录数、数据容量及索引容量的方法,通过展示具体SQL语句,帮助读者了解如何评估数据库的存储使用情况。
SELECT
	TABLE_SCHEMA AS "数据库",
	TABLE_NAME AS "表名",
	TABLE_ROWS AS "记录数",
	TRUNCATE (DATA_LENGTH / 1024 / 1024, 2) AS "数据容量(MB)",
	TRUNCATE (INDEX_LENGTH / 1024 / 1024, 2) AS "索引容量(MB)"
FROM
	information_schema.`TABLES`
ORDER BY
	TABLE_SCHEMA DESC,
	DATA_LENGTH DESC,
	INDEX_LENGTH DESC

结果信息
结果信息

<think> 根据用户需求,需要查询MySQL数据库中数据的数据量(记录数)和占用磁盘空间小。结合提供的引用信息,我们可以通过查询`information_schema`数据库中的`TABLES`来获取这些信息。 具体步骤如下: 1. 使用`USE information_schema;`切换到`information_schema`数据库(可选,也可以直接查询)。 2. 查询`TABLES`,其中`TABLE_SCHEMA`字段数据库名,`TABLE_NAME`名,`TABLE_ROWS`的记录数(数据量),`DATA_LENGTH`示数据长度(字节),`INDEX_LENGTH`示索引长度(字节)。总占用空间为`DATA_LENGTH + INDEX_LENGTH`。 我们可以将字节转换为MB,以便于阅读。 根据引用[4]中的示例,我们可以编写如下查询语句: 查询指定数据库中所有的数据量、数据空间、索引空间和总空间(以MB为单位): ```sql SELECT TABLE_NAME AS '名', TABLE_ROWS AS '记录数', CONCAT(TRUNCATE(DATA_LENGTH/1024/1024,2),' MB') AS '数据空间', CONCAT(TRUNCATE(INDEX_LENGTH/1024/1024,2),' MB') AS '索引空间', CONCAT(TRUNCATE((DATA_LENGTH+INDEX_LENGTH)/1024/1024,2),' MB') AS '总空间' FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'your_database_name' ORDER BY TABLE_ROWS DESC, INDEX_LENGTH DESC; ``` 注意:将`your_database_name`替换为你要查询数据库名称。 如果用户需要查看所有数据库的空间占用情况(如引用[2]所示),可以使用: ```sql SELECT TABLE_SCHEMA AS '数据库', CONCAT(TRUNCATE(SUM(DATA_LENGTH)/1024/1024,2),' MB') AS '数据小', CONCAT(TRUNCATE(SUM(INDEX_LENGTH)/1024/1024,2),' MB') AS '索引小', CONCAT(TRUNCATE(SUM(DATA_LENGTH+INDEX_LENGTH)/1024/1024,2),' MB') AS '总小' FROM information_schema.TABLES GROUP BY TABLE_SCHEMA ORDER BY SUM(DATA_LENGTH) DESC; ``` 另外,引用[3]中提到可以查看指定数据库下所有小和记录数,我们已经在第一个查询中实现。 关于记录数(`TABLE_ROWS`)的准确性:在InnoDB存储引擎中,这个值是一个近似值,可能不是精确计数。如果需要精确的行数,可以使用`SELECT COUNT(*) FROM table_name`,但请注意对于这可能比较耗时。 总结:通过查询`information_schema.TABLES`,我们可以获取到数据库小信息以及记录数。用户可以根据需要选择查询整个数据库还是特定数据库中的。 §§相关问题§§ 1. 如何查看MySQL中某个的具体行数(精确计数)? 2. 为什么`information_schema.TABLES`中`TABLE_ROWS`的行数不精确? 3. 如何清理MySQL数据库中的碎片以释放磁盘空间? 4. 如何查看MySQL数据库的版本信息? </think>### MySQL查询数据库数据量与磁盘空间小的方法 在MySQL中,可以通过查询系统数据库`information_schema`来获取数据的数据量(记录数)和磁盘空间占用情况。以下是具体方法: #### 1. 查看指定数据库中所有的数据量及空间占用 ```sql SELECT TABLE_NAME AS '名', TABLE_ROWS 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 '总空间' FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'your_database_name' ORDER BY DATA_LENGTH DESC; ``` **说明**: - 替换`your_database_name`为实际数据库名 - `TABLE_ROWS`显示数据量(记录数) - `DATA_LENGTH`是数据占用空间 - `INDEX_LENGTH`是索引占用空间 - 结果按数据空间降序排列[^3][^4] #### 2. 查看所有数据库的空间占用情况 ```sql SELECT TABLE_SCHEMA AS '数据库', CONCAT(ROUND(SUM(DATA_LENGTH)/(1024*1024),2),' MB') AS '数据小', CONCAT(ROUND(SUM(INDEX_LENGTH)/(1024*1024),2),' MB') AS '索引小', CONCAT(ROUND(SUM(DATA_LENGTH+INDEX_LENGTH)/(1024*1024),2),' MB') AS '总小' FROM information_schema.TABLES GROUP BY TABLE_SCHEMA ORDER BY SUM(DATA_LENGTH) DESC; ``` **输出示例**: | 数据库 | 数据小 | 索引小 | 总小 | |-------------|----------|----------|---------| | ecommerce | 245.76 MB| 68.32 MB | 314.08 MB| | blog | 120.50 MB| 32.15 MB | 152.65 MB| #### 3. 查看单个的详细空间信息 ```sql SELECT TABLE_NAME AS '名', TABLE_ROWS AS '记录数', CONCAT(ROUND(DATA_LENGTH/1024,2),' KB') AS '数据小', CONCAT(ROUND(INDEX_LENGTH/1024,2),' KB') AS '索引小', CONCAT(ROUND(DATA_FREE/1024,2),' KB') AS '碎片空间' FROM information_schema.TABLES WHERE TABLE_NAME = 'your_table_name' AND TABLE_SCHEMA = 'your_database_name'; ``` #### 注意事项: 1. 权限要求:需要`SELECT`权限访问`information_schema`数据库 2. 数据量精度:`TABLE_ROWS`对InnoDB是估算值,对MyISAM是精确值 3. 空间计算:包含数据和索引空间,不包括碎片空间 4. 单位换算:`1 MB = 1024*1024 字节` #### 示例查询结果解释 ```sql -- 查询示例 SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'test_db' AND TABLE_NAME = 'orders'; ``` 可能返回: ``` +------------+-------------+------------+------------+ | TABLE_ROWS | DATA_LENGTH | INDEX_LENGTH | DATA_FREE | +------------+------------+--------------+-----------+ | 12050 | 5242880 | 2097152 | 1048576 | +------------+------------+--------------+-----------+ ``` - **记录数**:12,050行 - **数据空间**:5MB(5242880字节) - **索引空间**:2MB(2097152字节) - **碎片空间**:1MB(未使用的碎片空间)[^1][^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值