在MySQL中,有几种方法可以查询数据库中所有表的数据量(行数)。以下是几种常用的方法:
SELECT
table_name,
table_rows
FROM
information_schema.tables
WHERE
table_schema = '你的数据库名'
ORDER BY
table_rows DESC;
注意:这种方法获取的行数是近似值,对于InnoDB表可能不精确,因为InnoDB不实时维护行数统计。
SELECT
CONCAT('SELECT ''', table_name, ''' AS table_name, COUNT(*) AS row_count FROM ', table_name, ' UNION ALL')
FROM
information_schema.tables
WHERE
table_schema = '你的数据库名'
AND table_type = 'BASE TABLE';
执行上述查询会生成一个SQL语句,你可以复制并执行这个生成的SQL来获取精确的行数。
DELIMITER //
CREATE PROCEDURE count_all_rows()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE table_name VARCHAR(255);
DECLARE cur CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_schema = DATABASE();
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
CREATE TEMPORARY TABLE IF NOT EXISTS table_row_counts (
table_name VARCHAR(255),
row_count INT
);
OPEN cur;
read_loop: LOOP
FETCH cur INTO table_name;
IF done THEN
LEAVE read_loop;
END IF;
SET @sql = CONCAT('INSERT INTO table_row_counts SELECT ''', table_name, ''', COUNT(*) FROM ', table_name);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
CLOSE cur;
SELECT * FROM table_row_counts ORDER BY row_count DESC;
DROP TEMPORARY TABLE table_row_counts;
END //
DELIMITER ;
-- 调用存储过程
CALL count_all_rows();
mysql -u用户名 -p密码 -e "USE 数据库名; SHOW TABLES;" | grep -v Tables_in | while read table; do echo -n "$table: "; mysql -u用户名 -p密码 -e "USE 数据库名; SELECT COUNT(*) FROM $table;" | grep -v COUNT; done
选择哪种方法取决于你对精确度的需求以及数据库的大小。