我已经进行了一些搜索,但我没有找到对我的问题的明确答案和解释。
我有 5 个表,分别称为 table1、table2、table3、table4 和 table5,我想COUNT(*)
在每个表上执行以获取行数。
我应该尝试将这些组合成一个查询还是使用 5 个单独的查询?我一直被告知,查询数量越少越好,所以我猜我应该尝试将它们组合成一个查询。
一种方法是使用UNION
,但有谁知道最有效的方法是什么,为什么?
谢谢你的帮助。
我已经进行了一些搜索,但我没有找到对我的问题的明确答案和解释。
我有 5 个表,分别称为 table1、table2、table3、table4 和 table5,我想COUNT(*)
在每个表上执行以获取行数。
我应该尝试将这些组合成一个查询还是使用 5 个单独的查询?我一直被告知,查询数量越少越好,所以我猜我应该尝试将它们组合成一个查询。
一种方法是使用UNION
,但有谁知道最有效的方法是什么,为什么?
谢谢你的帮助。
假设您只想要每个计数(*),那么
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 方法的值。
如果您具有对此的读取权限(而不是在您没有自己的实际数据库实例的共享主机上),您可以从INFORMATION_SCHEMA TABLES表中读取该信息,该表确实有一TABLE_ROWS
列。
(请注意它对那里的 InnoDB 表所说的内容——因此,如果您不是 MyISAM 并且需要精确的计数,则另一个答案有更好的解决方案。)