php排序比mysql"order by"好吗?

ale*_*rio 26 mysql sorting performance

我想知道,就性能而言,考虑在具有非常非常多(> 1.000.000)个记录的表上选择mysql时,使用sql"order by"更好地排序结果,或者在使用经典编程排序查询后对结果进行排序算法......有人有什么建议吗?

坦克

Pek*_*ica 22

mySQL,放下手.它已经过优化,可以使用索引.这在PHP中会很糟糕(你可以memory_limit快速达到).


JAL*_*JAL 18

您将系统与在优化的C中实现的方法进行比较,这意味着完成此任务,而您要在解释的脚本语言中实现另一个.

基本上,用C语言编写的任何东西都要比用PHP编写的等效函数快10到100倍.

如前所述,毫无疑问,正确配置数据库并让它完成工作会更有效率.


Sco*_*ord 13

MySQL会赢.除了列出的其他原因之外,还有一个原因是,假设记录已经在数据库中,您不必将它们从数据库中复制出来进行排序.对它们进行分页或子索引将很容易并自动优化.

简而言之,如果数据库可以做到这一点,数据库应该几乎总是这样做.

  • +1 - 转移数据进行排序将比在数据库上进行转移要昂贵得多. (2认同)

Pet*_*ans 10

在假设的情况下,你实际上在你的应用程序的内存中获取记录,然后mysql仍将击败你的应用程序的裤子,因为如果你正确配置你的数据库它将无法排序.

我想要在一个包含1个Mio记录的表中进行排序,您将提供索引,该索引通常实现为B-Tree,其中Mysql可以遍历并获取排序结果.


Kev*_*vin 5

有时,如果您可以避免“使用临时;使用文件排序”,那么这是值得的,尽管我还没有进行广泛的测试。

1   SIMPLE  favorites   ref source_id,user2_id  source_id   3   const   137 Using index; Using temporary; Using filesort
1   SIMPLE  users   eq_ref  PRIMARY,updated PRIMARY 3   apm.favorites.target_id 1   Using where
Run Code Online (Sandbox Code Playgroud)

我没有要求 mysql 按名称排序,而是在 ruby​​ 中这样做

results.sort_by {|u| u.name.downcase}
Run Code Online (Sandbox Code Playgroud)

生成的 mysql 查询现在更简单:

1   SIMPLE  favorites   ref source_id,user2_id  source_id   3   const   137 Using index
1   SIMPLE  users   eq_ref  PRIMARY,updated PRIMARY 3   apm.favorites.target_id 1   Using where
Run Code Online (Sandbox Code Playgroud)

当然,如果您返回的行数超过几百行,您就不想这样做。