加入计数查询mysql以获得性能

时间:2014-04-28 16:08:51

标签: php mysql

已搜索但无法找到符合此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>

4 个答案:

答案 0 :(得分:5)

发送查询和获得单行响应的开销非常小。

通过组合查询,没有什么可以获得的。


如果您还没有索引,INDEX列上的published会大大加快前两个查询的速度。

答案 1 :(得分:1)

您可以使用类似

的内容
SELECT SUM(published=1)

其中一些。 MySQL将采用published=1的布尔结果并将其转换为整数01,这可以归结为。

但看起来你正在处理MULTIPLE表(如果那是*****等等......),在这种情况下你可以&#39真的。您可以使用UNION查询,例如:

SELECT ...
UNION ALL
SELECT ...
UNION ALL 
SELECT ...
etc...

这可以作为对DB的单个查询触发,但它仍然将每个子查询作为自己的查询执行,并简单地将各个结果集聚合成一个更大的集合。

答案 2 :(得分:0)

正如@Halcyon所说,这里没什么可增益的。无论如何,您可以执行多个UNIONS以在一个查询中获得所有结果

答案 3 :(得分:0)

不同意@Halcyon我认为存在明显的差异,特别是如果MySQL服务器位于不同的计算机上,因为每个查询至少使用一个网络数据包。

我建议您使用标记字段UNION查询以防止意外。