PHP/SQL: ORDER BY还是sort($array)?

7

你认为在 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);

大家的回答都很好,谢谢...我给大家点赞了,这样你们就能得到一些声望了。 - user35288
6个回答

13

这取决于很多因素,我甚至不知道该从哪些方面入手。

但通常情况下,您会在数据库端执行排序。

索引、排序规则等都会有所帮助。


1
将你的代码与数据库对抗只会导致心碎。 - Learning
实际上,有时客户端排序更快,我甚至在我的一个应用程序中使用了这个功能。计时测试将在SELECT和FOR子句中的省略号上失败,我们不知道要用什么替代它们。 - Quassnoi

3
您认为在PHP脚本中哪个更快:ORDER BY吗?ORDER BY不是在PHP脚本中执行的 - 它在数据库中执行,在PHP脚本检索数据之前执行。如果这听起来很啰嗦,我很抱歉,我只是想确保您理解这一点。无论如何,我使用ORDER BY的原因是数据库可以访问数据库中的索引和缓存页面。在PHP中排序当然会对数据集进行内存排序,但无法访问任何索引。

谢谢澄清...我理解了,只是想给你们一些背景。 - user35288

1
在我看来,没有什么比实际计时更能确保你真正地知道它的效果。
$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";

1
如果排序字段已经建立索引,我会说可能是SQL查询。如果没有,我不确定,但我想无论如何,除非你处理的行数非常大,否则不会过于明显。

1

使用ORDER BY几乎总是更快的。


1

如果第一个查询有LIMIT,并且查询没有LIMIT的行集比LIMIT大得多,则在查询上排序的速度绝对更快。

也就是说,如果你需要从一张有10000行的表中获取前50行,那么让数据库为你排序并返回这些前50行,要比在PHP中检索所有10000行并自己进行排序要快得多。这可能代表了真实应用程序中发生的绝大多数情况。

如果有任何情况下,PHP中的排序甚至和SQL中的排序相比较,那么这样的情况很少见。

另外,SQL排序更加强大,可以轻松地对多个列、子查询、聚合函数的返回值等进行排序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接