innodb 更新存储的索引大小以及记录数

innodb 更新存储的索引大小以及记录数

思路:

数据量极小,可以根据行数 快速找出我需要的表~ 。

mysql8 存储过程解决方案 ,谨慎使用!!

建议本地测试使用 ,数据量大的别用!!

复制代码
DELIMITER //

DROP PROCEDURE IF EXISTS FindAccurateNonEmptyTables //

CREATE PROCEDURE FindAccurateNonEmptyTables()
BEGIN
    -- 1. 所有声明(DECLARE)语句集中放在开头
    
    -- 声明变量用于存储表名
    DECLARE v_table_name VARCHAR(255);
    
    -- 声明游标,遍历目标数据库中的所有 BASE TABLE
    DECLARE table_cursor CURSOR FOR 
        SELECT table_name 
        FROM information_schema.TABLES
        WHERE table_schema = @db_name 
          AND table_type = 'BASE TABLE';
          
    -- 声明 NOT FOUND 处理器,用于退出循环
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET @finished = 1;

    -- 2. 所有可执行语句(SET, OPEN, LOOP 等)从这里开始
    
    -- 定义要操作的数据库名称
    SET @db_name = 'testdb'; 
    
    -- 初始化变量
    SET @finished = 0;
    
    -- 打开游标
    OPEN table_cursor;

    -- 遍历所有表并执行 ANALYZE TABLE
    analyze_loop: LOOP
        FETCH table_cursor INTO v_table_name;
        
        IF @finished = 1 THEN
            LEAVE analyze_loop;
        END IF;

        -- 构造动态 SQL 语句:ANALYZE TABLE `db_name`.`table_name`
        SET @sql = CONCAT('ANALYZE TABLE `', @db_name, '`.`', v_table_name, '`');
        
        -- 准备并执行动态 SQL
        PREPARE stmt FROM @sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;

    END LOOP;
    
    -- 关闭游标
    CLOSE table_cursor;

    -- 3. 执行最终查询:查询已更新统计信息的非空表
    SELECT
        table_schema AS DatabaseName,
        table_name AS TableName,
        table_rows AS RecordCount
    FROM
        information_schema.TABLES
    WHERE
        table_schema = @db_name
        AND table_type = 'BASE TABLE'
        AND table_rows > 0
    ORDER BY
        RecordCount DESC,
        TableName ASC;

END //

DELIMITER ;

-- 4. 执行存储过程
CALL FindAccurateNonEmptyTables();
相关推荐
TDengine (老段)6 小时前
直播回放 | IDMP 无问智推技术详解
数据库·人工智能·物联网·ai·时序数据库·tdengine·涛思数据
DemonAvenger6 小时前
Redis内存管理与优化策略:避免OOM的最佳实践
数据库·redis·性能优化
pandarking6 小时前
[CTF]攻防世界:fakebook (sql注入)
数据库·sql·web安全·网络安全
T1ssy6 小时前
深入解析Redis三大缓存问题:穿透、击穿、雪崩及解决方案
数据库·redis·缓存
都是蠢货6 小时前
mysql中null是什么意思?
android·数据库·mysql
爱技术的阿呆6 小时前
MySQL的表连接及案例演示
数据库·sql
光羽隹衡6 小时前
SQL的导入导出数据和查询
数据库·sql
爱技术的阿呆6 小时前
MySQL子查询及其案例
数据库·mysql