0

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

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

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

一种方法是使用UNION,但有谁知道最有效的方法是什么,为什么?

谢谢你的帮助。

4

2 回答 2

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 个值,而 1 行有多个 subselect 方法的值。

于 2013-07-04T21:00:17.647 回答
0

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

(请注意它对那里的 InnoDB 表所说的内容——因此,如果您不是 MyISAM 并且需要精确的计数,则另一个答案有更好的解决方案。)

于 2013-07-04T21:30:35.150 回答