查询数据库中所有表的数据量大小、表行记录数

这篇博客展示了如何使用SQL查询语句从information_schema.TABLES表中获取特定数据库中所有表的数据量大小、索引大小、表格行数量等信息,并计算了数据和索引的总大小,最后按行数降序排列表格。

查询数据库中所有表的数据量大小、表行记录数
SELECT
TABLE_NAME AS ‘表名字’,
DATA_LENGTH AS ‘数据大小’,
INDEX_LENGTH AS ‘索引大小’,
TABLE_ROWS AS ‘表格行数量’,
(DATA_LENGTH + INDEX_LENGTH) AS ‘数据和所有总大小’,
concat(round((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024,2),‘MB’) AS ‘占用空间’
FROM
information_schema. TABLES
WHERE
TABLE_SCHEMA = ‘数据库名’
ORDER BY
TABLE_ROWS 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 &#39;名&#39;, TABLE_ROWS AS &#39;记录&#39;, CONCAT(TRUNCATE(DATA_LENGTH/1024/1024,2),&#39; MB&#39;) AS &#39;据空间&#39;, CONCAT(TRUNCATE(INDEX_LENGTH/1024/1024,2),&#39; MB&#39;) AS &#39;索引空间&#39;, CONCAT(TRUNCATE((DATA_LENGTH+INDEX_LENGTH)/1024/1024,2),&#39; MB&#39;) AS &#39;总空间&#39; FROM information_schema.TABLES WHERE TABLE_SCHEMA = &#39;your_database_name&#39; ORDER BY TABLE_ROWS DESC, INDEX_LENGTH DESC; ``` 注意:将`your_database_name`替换为你要查询的名称。 如果用户需要查看所有的空间占用情况(如引用[2]所示),可以使用: ```sql SELECT TABLE_SCHEMA AS &#39;&#39;, CONCAT(TRUNCATE(SUM(DATA_LENGTH)/1024/1024,2),&#39; MB&#39;) AS &#39;大小&#39;, CONCAT(TRUNCATE(SUM(INDEX_LENGTH)/1024/1024,2),&#39; MB&#39;) AS &#39;索引大小&#39;, CONCAT(TRUNCATE(SUM(DATA_LENGTH+INDEX_LENGTH)/1024/1024,2),&#39; MB&#39;) AS &#39;总大小&#39; 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 &#39;名&#39;, TABLE_ROWS AS &#39;记录&#39;, CONCAT(ROUND(DATA_LENGTH/(1024*1024),2),&#39; MB&#39;) AS &#39;据空间&#39;, CONCAT(ROUND(INDEX_LENGTH/(1024*1024),2),&#39; MB&#39;) AS &#39;索引空间&#39;, CONCAT(ROUND((DATA_LENGTH+INDEX_LENGTH)/(1024*1024),2),&#39; MB&#39;) AS &#39;总空间&#39; FROM information_schema.TABLES WHERE TABLE_SCHEMA = &#39;your_database_name&#39; ORDER BY DATA_LENGTH DESC; ``` **说明**: - 替换`your_database_name`为实际名 - `TABLE_ROWS`显示数据量记录) - `DATA_LENGTH`是据占用空间 - `INDEX_LENGTH`是索引占用空间 - 结果按据空间降序排列[^3][^4] #### 2. 查看所有的空间占用情况 ```sql SELECT TABLE_SCHEMA AS &#39;&#39;, CONCAT(ROUND(SUM(DATA_LENGTH)/(1024*1024),2),&#39; MB&#39;) AS &#39;大小&#39;, CONCAT(ROUND(SUM(INDEX_LENGTH)/(1024*1024),2),&#39; MB&#39;) AS &#39;索引大小&#39;, CONCAT(ROUND(SUM(DATA_LENGTH+INDEX_LENGTH)/(1024*1024),2),&#39; MB&#39;) AS &#39;总大小&#39; 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 &#39;名&#39;, TABLE_ROWS AS &#39;记录&#39;, CONCAT(ROUND(DATA_LENGTH/1024,2),&#39; KB&#39;) AS &#39;大小&#39;, CONCAT(ROUND(INDEX_LENGTH/1024,2),&#39; KB&#39;) AS &#39;索引大小&#39;, CONCAT(ROUND(DATA_FREE/1024,2),&#39; KB&#39;) AS &#39;碎片空间&#39; FROM information_schema.TABLES WHERE TABLE_NAME = &#39;your_table_name&#39; AND TABLE_SCHEMA = &#39;your_database_name&#39;; ``` #### 注意事项: 1. 权限要求:需要`SELECT`权限访问`information_schema` 2. 数据量精度:`TABLE_ROWS`对InnoDB是估算值,对MyISAM是精确值 3. 空间计算:包含据和索引空间,不包括碎片空间 4. 单位换算:`1 MB = 1024*1024 字节` #### 示例查询结果解释 ```sql -- 查询示例 SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA = &#39;test_db&#39; AND TABLE_NAME = &#39;orders&#39;; ``` 可能返回: ``` +------------+-------------+------------+------------+ | 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、付费专栏及课程。

余额充值