一个查询中有多个表计数

时间:2013-07-04 20:57:06

标签: mysql

我已经做了一些搜索,但我没有找到一个明确的答案和解释我的问题。

我有5个名为table1,table2,table3,table4和table5的表,我想在每个表上执行COUNT(*)以获取行数。

我应该尝试将这些组合成一个查询还是使用5个单独的查询?我一直被告知最少的查询数量越多越好,所以我猜我应该尝试将它们组合成一个查询。

这样做的一种方法是使用UNION但有人知道这样做的最有效方法是什么以及为什么?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

假设你只想要每个人的计数(*),那么

SELECT
   ( SELECT count(*) from table1 ) AS table1,
   ( SELECT count(*) from table2 ) AS table2,
   ( SELECT count(*) from table3 ) AS table3,
   etc...
)

会将这些计数作为一行。数据库服务器仍然会运行n + 1个查询(n个表,1个父查询)来获取这些计数,但如果您使用的是UNION则情况相同。联合会产生多行,每行有1个值,v。具有多个subselect方法值的1行。

答案 1 :(得分:0)

如果您具有对此的读取权限(而不是在没有实际数据库实例的共享主机上),您可以从INFORMATION_SCHEMA TABLES表中读取该信息,该表具有{{1列。

(请注意它对InnoDB表的说法 - 所以如果你不是MyISAM而需要精确计数,那么另一个答案就是更好的解决方案。)