Mysql 来自多个表的计数之和

Mysql 来自多个表的计数之和,mysql,Mysql,我有十几张同样结构的桌子。他们所有的名字都匹配question\u 20%。每个表都有一个名为loaded的索引列,其值可以是0和1 我想计算加载=1的所有记录。如果我只有一个表,我会从问题中运行选择count(*),其中loaded=1 我是否可以运行一个查询来查找信息\u架构中的表。表,对所有这些计数求和,并生成单个输出?这对于注释来说太长了 您可以使用动态SQL做您想做的事情。我相信有人会解决这个问题 但是,您的数据结构存在问题。拥有多个并行表通常是一个非常糟糕的主意。SQL支持非常大的表

我有十几张同样结构的桌子。他们所有的名字都匹配
question\u 20%
。每个表都有一个名为
loaded
的索引列,其值可以是
0
1

我想计算
加载=1
的所有记录。如果我只有一个表,我会从问题中运行
选择count(*),其中loaded=1


我是否可以运行一个查询来查找
信息\u架构中的表。表
,对所有这些计数求和,并生成单个输出?

这对于注释来说太长了

您可以使用动态SQL做您想做的事情。我相信有人会解决这个问题

但是,您的数据结构存在问题。拥有多个并行表通常是一个非常糟糕的主意。SQL支持非常大的表,因此从查询(正如您现在所了解的)和可维护性的角度来看,将所有信息放在一个表中非常方便

SQL提供索引和分区方案来解决大型表上的性能问题

有时,需要单独的表格来满足特定的系统要求。如果是,则应提供一个视图来组合所有表:

create view v_tables as
    select t1.*, 'table1' as which from table1 union all
    select t2.*, 'table2' as which from table2 union all
    . . .
如果您有这样的观点,那么您的查询将是:

select which, count(*)
from v_tables
where loaded = 1
group by which;

也许你没有一打桌子。我实际上有一张很大的桌子,但由于服务器容量(4GB的RAM),管理起来很困难。使用sort的修复在24小时后未完成,即使使用set
myisam\u sort\u buffer\u size=1g
。当我创建视图并运行查询时,MySQL通过创建一个临时表来处理它,直到我填满了这个小小的临时空间。@mossaab。您可能只需要按“问题”列对其进行分区。