【问题标题】: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才会更快
  • 这可能取决于。对其进行基准测试!

标签: php sql


【解决方案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。但尽量不要过度优化。

      【讨论】:

        猜你喜欢
        • 2011-12-18
        • 2011-06-16
        • 1970-01-01
        • 1970-01-01
        • 2016-04-07
        • 2011-09-25
        • 1970-01-01
        • 2013-04-04
        • 2011-02-10
        相关资源
        最近更新 更多