mysql 获取db表记录行数

这篇博客探讨了如何使用SQL查询来找出数据库中数据量最大的表,这对于数据迁移或性能优化等场景非常有用。通过执行特定的SQL语句,可以筛选出指定数据库(例如'xxx')中行数最多的表,并按降序排列。
SELECT 
  table_name,
  table_rows 
FROM
  INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = 'xxx' ORDER BY table_rows DESC 

什么情况下需要该sql?

比如:做DB数据迁移时,探测哪些表有数据,以决定迁移哪些表。

### 设置 MySQL 变量以存储记录数 在 MySQL 中,可以使用 `SET` 命令将查询结果赋值给用户定义的会话变量或全局变量。为了实现这一目标,通常通过子查询的方式获取记录数并将其保存到指定的变量中。 以下是具体方法: #### 使用 SET 和 SELECT 结合 可以通过以下方式将某个记录数存储到一个用户定义的变量中: ```sql SET @row_count := (SELECT COUNT(*) FROM trexinfo); ``` 此语句的作用是从 `trexinfo` 中统计总行数,并将该数值赋予名为 `@row_count` 的用户变量[^1]。 如果希望查看当前变量的内容,则可运行如下命令: ```sql SELECT @row_count; ``` #### 动态更新多个记录数 当需要处理多张时,也可以利用循环结构或者动态 SQL 来批量完成操作。例如,在存储过程中逐一读取每一张的名字并通过上述逻辑填充对应的计数器。 需要注意的是,对于非常大的数据集合来说,执行全扫描可能会消耗较多时间资源以及内存空间,因此建议合理规划索引设计以便优化性能现[^4]。 另外值得注意的一点在于,这里所提到的方法仅适用于临时性的需求场景;若是长期维护某类元信息则推荐考虑借助专门的信息模式视图如information_schema.tables来进行管理。 ```sql -- 示例:创建过程自动计算各行数并存入session级自定义varibles DELIMITER $$ CREATE PROCEDURE calc_table_rowcounts() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE cur_tablename VARCHAR(255); -- 定义游标遍历所有base tables under current db schema. DECLARE cursor_tables CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_SCHEMA=DATABASE(); OPEN cursor_tables; read_loop: LOOP FETCH cursor_tables INTO cur_tablename ; IF done THEN LEAVE read_loop ; END IF ; SET @dynamic_sql = CONCAT('SET @',cur_tablename,'_rows := (select count(*) from ',cur_tablename,')'); PREPARE stmt FROM @dynamic_sql ; EXECUTE stmt ; DEALLOCATE PREPARE stmt ; END LOOP ; CLOSE cursor_tables ; END$$ DELIMITER ; ``` 调用以上储存程序之后即可得到一系列形似于下面这样的新建立起来之Session级别User Variables: ```bash mysql> CALL calc_table_rowcounts(); Query OK, 0 rows affected (some_time) mysql> SHOW VARIABLES LIKE 'mytable%'; +------------------+---------+ | Variable_name | Value | +------------------+---------+ | mytable_rows | someval | ... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值