使用 php array count() 是不是比使用 SQL 行数更快?

Posted

技术标签:

【中文标题】使用 php array count() 是不是比使用 SQL 行数更快?【英文标题】:Is it faster to use php array count() than SQL row count?使用 php array count() 是否比使用 SQL 行数更快? 【发布时间】:2013-02-28 23:58:33 【问题描述】:

简而言之:在多个数组上使用 php 数组 count() 是否比多次使用 SQL 行数更快?

我遇到了一个慢查询问题,我将其归因于 COUNT(*) 函数。我将解释我在做什么,然后我预计可能会明显更快。

目前我正在循环一个函数,该函数每次迭代计算大约 20,000 行。它返回一年中每个月的行数:

// CREATE MONTHLY LINKS
public function monthly_links() 

    $months = array('','January','February','March','April','May','June','July','August', 'September','October','November','December');
    for ($i=1 ; $i <= 12 ; $i++) 
        $array[] = "<a href='monthly.php?month=" . $i . "&status=3'>" . $months[$i] . " " . $this->chosen_year() . " (" . $this->number_positions_month_year($i, $this->chosen_year()) . ")</a>";
    
    return $array;




// SHOW NUMBER OF POSITIONS FOR EACH MONTH/YEAR
public function number_positions_month_year($month, $year) 

    $sql = $this->client_positions_sql() . " AND MONTH(`exp_date`) = " . $month . " AND YEAR(`exp_date`) = " . $year;
    $res = $this->conn->query($sql);
    $count = $res->num_rows;

    return $count;

在上面的示例中,代码并不那么重要,因为基本上我要问的是:执行以下操作是否更快...?

查询表一次,同时将每个月对应的 id 转储到一个数组中(会有 12 个数组) 在每个数组上使用 PHP count() 来获取每个月的条目数

【问题讨论】:

请拍摄您正在使用的查询 只有正确完成mysql才会更快 这可能取决于。对其进行基准测试! 【参考方案1】:

可以使用SQL的group by函数按月分组。

SELECT COUNT(*), MONTH(exp_date)
FROM theTableYouAreUsing
GROUP BY MONTH(exp_date)

然后在 php 中,在返回的数组中,您将获得所需月份的计数。

在速度方面,这比每个月单独查询要快得多。

【讨论】:

【参考方案2】:

简而言之:过早的优化是万恶之源 :) 所以通常最终它并不重要。但是,请记住,根据您在何时何地需要行数来获取和处理结果的方式,您没有可用的单个数组中的完整数据,因此您没有可以调用@987654321 的数组@ 在。仅仅使用count() 似乎不是创建这样一个数组的正当理由,因为它会不必要地消耗内存。

【讨论】:

【参考方案3】:

我将不得不同意 KingCrunch 对此的看法。您真正需要查看的是您拥有的那种类型的应用程序,如果这是低容量的用户或类似的东西,那么如果您有大量的流量等等,那么现在在数据库中执行它会更快,并且避免使用数据库被php可以做的事情超载,那么当你大规模地达到类似的东西时,php会更快。始终要记住的是,如果您将结果集发送到 php,它将不得不通过网络接收数据,然后对其进行计数,这意味着更多的数据和网络延迟,但再次假设这是使用远程D b。但尽量不要过度优化。

【讨论】:

以上是关于使用 php array count() 是不是比使用 SQL 行数更快?的主要内容,如果未能解决你的问题,请参考以下文章

在Python中,array.count()的数量级是否比list.count()慢几个?

PHP array_count_values

php计算数组相同值出现次数的代码(array_count_values)

迭代php数组中的未知键(使用array_count_values创建)

由于 array_count_values() 显示警告消息

PHP中count()和sizeof()