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

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

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的数据库)中所有表的信息,包括表名、行数、数据大小、索引大小和总大小(数据和索引的总和),并将这些信息以易于阅读的格式显示出来。

查出的结果类似于:

TableName Number of Rows Data Size Index Size Total
infodb.pay_jnl 53563817 17.412125 G 6.241241 G 23.653366 G
infodb.user 3080174 0.419922 G 0.588455 G 1.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中查询数据库表中记录数据量 的全部内容,感谢阅读!

相关推荐
w-w0w-w22 分钟前
SQL注入
网络·数据库·sql
幽灵诶2 小时前
Mysql(基于测试的学习)
数据库·mysql
宇宙无敌暴龙战士6663 小时前
MySQL 8 库表操作学习笔记:SQL 基础、库表管理、约束与用户授权全流程
数据库·sql·mysql·学习笔记·后端开发
猿究院_夏燊3 小时前
MySQL 的四种隔离级别
java·数据库·mysql
paopaokaka_luck5 小时前
灾害应急物资管理系统(AI应急助手、Echarts可视化数据看板、捐赠入库联动、 物资全流程管理、库存变动追溯、灾情资讯与互动反馈、物资发放公示)
java·前端·javascript·spring boot·mysql·tomcat·echarts
这个DBA有点耶6 小时前
为什么删掉索引后,查询瞬间变快了?探讨MySQL的随机I/O与顺序I/O博弈
数据库·mysql·代码规范
GreatSQL8 小时前
GreatSQL 8.0回流MySQL 5.7主从复制中断分析排查过程
mysql
数据库小学妹8 小时前
MySQL磁盘IO瓶颈:iostat与刷脏fsync
数据库·mysql·性能优化
Umi·9 小时前
MySQL之DQL使用实例
数据库·mysql
贾公子10 小时前
检测结果怎么落库——表结构、状态机与三类对账
后端·mysql