MySQL数据库中所有行的精确计数

Con*_*ers 9 mysql sql database innodb

我目前正在使用该脚本

SELECT SUM(TABLE_ROWS) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'Tables';
Run Code Online (Sandbox Code Playgroud)

然而,它并不准确,因为我的MySQL表使用的引擎是InnoDB(我只是意识到这可能是一个问题,这些数据库已经存在了一段时间).

有没有办法用MySQL获取数据库每个表中每一行的精确计数?

干杯.

jkr*_*cma 11

我认为唯一准确(和较慢)的方法是为每一个表做:

SELECT COUNT(*) FROM Table
Run Code Online (Sandbox Code Playgroud)

  • 我不会将所有内容都放在 SQL 查询中,似乎 MySQL 无法从变量表名中进行选择。所以我至少想出了查询生成器:`SELECT CONCAT('SELECT COUNT(*) FROM ', table_name) FROM information_schema.tables WHERE table_schema = 'Tables';` (2认同)

小智 5

此SQL语句将生成一个联合查询,该查询可以在一个步骤中完成任务:

SELECT CONCAT('SELECT \'', table_name ,'\' as tbl, (SELECT COUNT(*) FROM ', table_name, ') AS ct UNION')
FROM information_schema.tables
WHERE table_schema = 'your_database';
Run Code Online (Sandbox Code Playgroud)

运行SQL语句后,只需将输出粘贴到文本编辑器中,从输出的末尾删除单词"UNION",即可进行联合查询.

请注意,运行联合查询可能会占用大量资源,具体取决于您的数据库大小,负载和硬件,因此您可能不希望一次性运行它.