有没有一种方法可以获取 MySQL 数据库中所有表中的行数,而无需在每个表上运行 SELECT count()
?
原文由 Mark 发布,翻译遵循 CC BY-SA 4.0 许可协议
像许多其他人一样,我很难在具有 InnoDB 的 INFORMATION_SCHEMA
表上获得准确的值,并且能够从能够进行依赖于 count()
的查询中无限受益,并且希望, 在一个单一的查询中完成。
首先,确保启用大量 group_concats:
SET SESSION group_concat_max_len = 1000000;
然后运行此查询以获取您将为数据库运行的结果查询。
SELECT CONCAT('SELECT ', GROUP_CONCAT(table1.count SEPARATOR ',\n')) FROM (
SELECT concat('(SELECT count(id) AS \'',table_name,' Count\' ','FROM ',table_name,') AS ',table_name,'_Count') AS 'count'
FROM information_schema.tables
WHERE table_schema = '**YOUR_DATABASE_HERE**'
) AS table1
这将生成输出,例如…
SELECT (SELECT count(id) AS 'table1 Count' FROM table1) AS table1_Count,
(SELECT count(id) AS 'table2 Count' FROM table2) AS table2_Count,
(SELECT count(id) AS 'table3 Count' FROM table3) AS table3_Count;
这反过来又产生了以下结果:
*************************** 1. row ***************************
table1_Count: 1
table2_Count: 1
table3_Count: 0
原文由 HoldOffHunger 发布,翻译遵循 CC BY-SA 4.0 许可协议
5 回答3.3k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
5 回答1.4k 阅读
2 回答1.8k 阅读
不过来自文档的注意事项: 对于 InnoDB 表, 行数只是 SQL 优化中使用的粗略估计。您需要使用 COUNT(*) 进行精确计数(这更昂贵)。