【问题标题】:PHP/SQL: ORDER BY or sort($array)?PHP/SQL:ORDER BY 或排序($array)?
【发布时间】:2010-10-13 21:41:00
【问题描述】:

您认为 PHP 脚本中哪个更快:

$query = "SELECT... FROM ... ORDER BY first_val";

while($row = odbc_fetch_array($result))
    $arrayname[] = array(
        "first_key" => $row['first_val'],
        "second_key" => $row['second_val'],
        etc...
    );
sort($arrayname);

【问题讨论】:

  • 每个人的答案都很好,谢谢...我对每个人都投了赞成票,所以你们会得到一些代表

标签: php sql arrays


【解决方案1】:

这取决于很多因素,我什至不知道从什么开始。

但通常,您在数据库端执行排序。

索引、排序规则和所有这些,它们都有帮助。

【讨论】:

  • +1。将您的代码与数据库相提并论只会导致心碎。
  • 实际上,在某些情况下客户端排序更快,我什至在我的一个应用程序中使用了它。 SELECT 和 FOR 子句中的省略号的计时测试将失败,我们不知道用什么代替它们。
【解决方案2】:

你认为在 php 脚本中哪个更快:

ORDER BY 不在 PHP 脚本中执行——它在 PHP 脚本检索数据之前在数据库中执行。抱歉,如果这看起来很迂腐,我只是想确保您理解这一点。

无论如何,我使用ORDER BY 的原因是数据库可以访问数据库中的索引和缓存页面。 PHP中的排序当然是对内存中的数据集进行排序,但无法访问任何索引。

【讨论】:

  • 感谢您的澄清...我明白,只是想给你们一些背景信息。
【解决方案3】:

如果有序字段被索引,我会说可能是 SQL 查询。如果不是,我不确定,但我无法想象这两种方式都会过于引人注目,除非您正在处理大量荒谬的行。

【讨论】:

    【解决方案4】:

    ORDER BY 几乎总是更快。

    【讨论】:

      【解决方案5】:

      在我看来,没有什么比实际计时更重要的了,所以你真的非常肯定地知道:

      $time_start = microtime(true);
      
      // Try the ORDER BY and sort($array) variants here
      
      $time_end = microtime(true);
      $time = $time_end - $time_start;
      
      echo "It took $time seconds";
      

      【讨论】:

        【解决方案6】:

        如果第一个查询有 LIMIT,并且没有 LIMIT 的查询将匹配的行集远大于 LIMIT,那么查询上的 ORDER BY 肯定会更快。

        也就是说,如果您需要 10,000 行表中的前 50 行,那么让数据库为您排序并只返回前 50 行比检索所有 10,000 行并排序要快得多他们自己在 PHP 中。这可能代表了实际应用程序中将发生的绝大多数情况

        如果在任何情况下,PHP 中的排序甚至具有可比性,那么它们很少见。

        此外,SQL 排序功能更强大 - 对多个列、子查询、聚合函数的返回值等进行排序是微不足道的。

        【讨论】:

          猜你喜欢
          • 2021-08-18
          • 2020-03-09
          • 2022-07-28
          • 1970-01-01
          • 1970-01-01
          • 2011-03-09
          • 2011-04-06
          • 1970-01-01
          相关资源
          最近更新 更多