【一次记一句:SQL】从 information_schema.TABLES中查询数据库表中记录数据量

有时候,一张千万数据量的表,使用 count(*) 统计记录数,查不动。可以使用下述SQL来试试:

SELECT CONCAT(table_schema, '.', table_name) AS "Table Name", table_rows AS "Number of Rows"
    , CONCAT(ROUND(data_length / (1024 * 1024 * 1024), 6), ' G') AS "Data Size"
    , CONCAT(ROUND(index_length / (1024 * 1024 * 1024), 6), ' G') AS "Index Size"
    , CONCAT(ROUND((data_length + index_length) / (1024 * 1024 * 1024), 6), ' G') AS "Total"
FROM information_schema.TABLES
WHERE table_schema LIKE 'infodb'
ORDER BY Total + 0 DESC;

这个SQL查询的目的是从MySQL的information_schema.TABLES视图中检索出特定数据库(在这个例子中是名为infodb的数据库)中所有表的信息,包括表名、行数、数据大小、索引大小和总大小(数据和索引的总和),并将这些信息以易于阅读的格式显示出来。

查出的结果类似于:

TableNameNumber of RowsData SizeIndex SizeTotal
infodb.pay_jnl5356381717.412125 G6.241241 G23.653366 G
infodb.user30801740.419922 G0.588455 G1.008377 G

查询语句详细解释:

1. 选择字段:

  • CONCAT(table_schema, ‘.’, table_name) AS “Table Name”: 将数据库名(table_schema)和表名(table_name)通过.连接起来,作为“Table Name”列显示。
  • table_rows AS “Number of Rows”: 直接显示表的行数,作为“Number of Rows”列。
  • CONCAT(ROUND(data_length / (1024 * 1024 * 1024), 6), ’ G’) AS “Data Size”: 将data_length(以字节为单位的数据大小)转换为GB,并保留6位小数,然后添加’ G’作为单位,作为“Data Size”列显示。
  • CONCAT(ROUND(index_length / (1024 * 1024 * 1024), 6), ’ G’) AS “Index Size”: 类似地,将索引大小(index_length)转换为GB,并显示为“Index Size”列。
  • CONCAT(ROUND((data_length + index_length) / (1024 * 1024 * 1024), 6), ’ G’) AS “Total”: 将数据大小和索引大小相加,然后转换为GB,并显示为“Total”列。

2. 筛选条件:

  • WHERE table_schema LIKE ‘infodb’: 只选择table_schema字段值为infodb的记录,即只查询infodb数据库中的表。

3. 排序:

  • ORDER BY Total + 0 DESC;: 这里通过Total + 0(实际上是对Total列进行隐式类型转换,确保它可以用于排序)来按“Total”列的值降序排序。这样,总大小最大的表会首先显示。

注意:table_rows字段在某些情况下可能不是一个完全准确的行数,因为它是一个估计值,特别是对于使用了InnoDB存储引擎的表。如果需要精确的行数,可能需要使用其他方法,如COUNT(*)查询。

此外,这个查询假设数据库服务器有足够的权限来访问information_schema.TABLES视图。如果没有,查询将失败。


以上就是 从 information_schema.TABLES中查询数据库表中记录数据量 的全部内容,感谢阅读!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用以下SQL语句查询每张表的数据量并且列出表名: ``` SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema = 'your_database_name'; ``` 其 `your_database_name` 需要替换为你要查询的数据库名称。这条语句会返回两个字段:`table_name` 表示表名,`table_rows` 表示该表的数据量。 ### 回答2: 要查询每张表的数据量并列出表名,可以使用以下SQL语句: ```sql SELECT table_name, table_rows FROM information_schema.tables WHERE table_schema = your_database_name; ``` 其,`your_database_name`为你要查询的数据库的名称。 这条SQL语句使用了`information_schema`系统表,该表包含了关于数据库、表、列、索引等的元数据信息。在这里,我们使用`information_schema.tables`表来获取所有表的信息。 `information_schema.tables`表包含许多字段,其`table_name`字段表示表的名称,`table_rows`字段表示表中数据量。 通过将表名和数据量作为查询结果的列,我们可以获取每张表的数据量并列出表名。 需要注意的是,该SQL语句仅适用于MySQL数据库。如果你使用的是其他数据库管理系统,请参考该系统的文档来确定获取表数据量的方法。 ### 回答3: 使用SQL语句查询每张表的数据量并列出表名的方法如下: 首先,可以使用系统表schema.table查询数据库的所有表名。例如,使用以下语句可以查询所有表的信息: SELECT table_name FROM information_schema.tables WHERE table_schema = 'your_database_name'; 然后,可以使用COUNT(*)函数结合每个表名来查询每张表的数据量。例如,使用以下语句可以查询每张表的数据量并列出表名: SELECT table_name, COUNT(*) FROM your_table_name GROUP BY table_name; 请注意将"your_database_name"和"your_table_name"替换为您所使用的数据库和表的名称。 以上的SQL查询语句能够筛选出所有数据库的表名,并且将每张表的数据量作为结果一并展示出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值