已搜索但无法找到符合此mysql查询确切需求的答案。
我在多个表上有以下quires来生成" stats"申请:
SELECT COUNT(id) as count FROM `mod_**` WHERE `published`='1';
SELECT COUNT(id) as count FROM `mod_***` WHERE `published`='1';
SELECT COUNT(id) as count FROM `mod_****`;
SELECT COUNT(id) as count FROM `mod_*****`;
非常简单,有时根据状态计算行数。
然而,为了追求性能,我希望将其纳入1个查询以节省资源。我使用php通过简单的mysql_fetch_assoc
获取此数据,并检索$res[count]
是否有所不同(pro不能保证,所以这里是普通的旧mysql)。< / p>
答案 0 :(得分:5)
发送查询和获得单行响应的开销非常小。
通过组合查询,没有什么可以获得的。
如果您还没有索引,INDEX
列上的published
会大大加快前两个查询的速度。
答案 1 :(得分:1)
您可以使用类似
的内容SELECT SUM(published=1)
其中一些。 MySQL将采用published=1
的布尔结果并将其转换为整数0
或1
,这可以归结为。
但看起来你正在处理MULTIPLE表(如果那是**
,***
等等......),在这种情况下你可以&#39真的。您可以使用UNION
查询,例如:
SELECT ...
UNION ALL
SELECT ...
UNION ALL
SELECT ...
etc...
这可以作为对DB的单个查询触发,但它仍然将每个子查询作为自己的查询执行,并简单地将各个结果集聚合成一个更大的集合。
答案 2 :(得分:0)
正如@Halcyon所说,这里没什么可增益的。无论如何,您可以执行多个UNIONS以在一个查询中获得所有结果
答案 3 :(得分:0)
不同意@Halcyon我认为存在明显的差异,特别是如果MySQL服务器位于不同的计算机上,因为每个查询至少使用一个网络数据包。
我建议您使用标记字段UNION查询以防止意外。