DB计数和数组计数之间的性能差异

时间:2013-12-28 13:48:28

标签: php mysql

我希望这听起来不会太过小,会引起舆论的回答。

在我的页面上,我已经在数据库中查询了一些带有计数的值,并将它们存储在一个数组中,以便稍后在我的页面上进行格式化。 topicCount是每个主题中发布的文章数。

topicName     | topicCount
--------------|-------------
Latest News   | 101
Events        | 273
...

我现在决定显示所有文章的计数。现在,这就是我要做的事情:

SELECT COUNT(*) AS articleCount FROM blogArticles
$articleCount = $row['articleCount'];

但我现在很好奇是否对我的阵列运行计数会更快和/或更便宜,因为我已经在我的脚本中获得了数据。

$articleCount = 0;
foreach ($results as $key=>$value) {
    $articleCount + $value['topicCount'];
}

哪种方法更好,为什么或者护理的差异太小?是否每天减少20,000个SQL请求以获得大量保存?

如果我只计算数组项count($array),我可能会猜测计算数组比查询数据库要快得多/便宜 - 但是必须加总数才能让我觉得可能有一个差异,特别是如果我有1000个主题与计数。

1 个答案:

答案 0 :(得分:1)

几乎总是如此,第二次数据库调用将比在PHP中执行更多的开销;虽然您可以修改原始MySQL以返回总计以及单个主题总计。例如使用WITH ROLLUP

SELECT topicName, 
       COUNT(topicID) AS topicCount
  FROM topicTable 
 GROUP BY topicName 
  WITH ROLLUP

应该给出类似的东西:

topicName     | topicCount
--------------|-------------
Latest News   | 101
Events        | 273
...
NULL          | 374

对于PHP> = 5.5.0,您可以使用array_sum()array_column()改进foreach循环:

$articleCount = array_sum(
    array_column(
        $results,
        'topicCount'
    )
);