何小豆儿在此 发表于 2024-9-18 22:58:04

【MySQL】MySQL查数据库中每个表的数据量

一、方法1,数据字典表

/* Mysql查数据库中每个表的数据量 */
SELECT table_schema
      ,table_name
      ,table_rows
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys');
二、方法2,存过,循环count()每张表

drop PROCEDURE if exists GetAllTableCounts;
CREATE PROCEDURE GetAllTableCounts()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE aDatabase CHAR(64);
    DECLARE aTable CHAR(64);
    DECLARE dateString VARCHAR(23);
    DECLARE cur1 CURSOR FOR SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys');
    DECLARE cur2 CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_schema = aDatabase;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    set @sqlString = 'select ''数据库名'' as dbname,''表名'' as tablename,''数量'' as count ';
    OPEN cur1;

    read_loop: LOOP
      FETCH cur1 INTO aDatabase;
      IF done THEN
            LEAVE read_loop;
      END IF;

      OPEN cur2;
      table_loop: LOOP
            FETCH cur2 INTO aTable;
            IF done THEN
                LEAVE table_loop;
            END IF;
            
            set @sqlString = CONCAT(@sqlString ,' union all select ''',aDatabase,''' as dbname, ''',aTable,''' as tablename, count(*) from ',aDatabase,'.',aTable);
            
      END LOOP table_loop;

      CLOSE cur2;
      SET done = FALSE;
    END LOOP read_loop;
   
    CLOSE cur1;
    select @sqlString;
   
    PREPARE stmt FROM @sqlString;
    execute stmt;
    DEALLOCATE PREPARE stmt;
   
END;

-- 调用方式1
-- call GetAllTableCounts();

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【MySQL】MySQL查数据库中每个表的数据量