ale*_*rio 26 mysql sorting performance
我想知道,就性能而言,考虑在具有非常非常多(> 1.000.000)个记录的表上选择mysql时,使用sql"order by"更好地排序结果,或者在使用经典编程排序查询后对结果进行排序算法......有人有什么建议吗?
坦克
JAL*_*JAL 18
您将系统与在优化的C中实现的方法进行比较,这意味着完成此任务,而您要在解释的脚本语言中实现另一个.
基本上,用C语言编写的任何东西都要比用PHP编写的等效函数快10到100倍.
如前所述,毫无疑问,正确配置数据库并让它完成工作会更有效率.
Sco*_*ord 13
MySQL会赢.除了列出的其他原因之外,还有一个原因是,假设记录已经在数据库中,您不必将它们从数据库中复制出来进行排序.对它们进行分页或子索引将很容易并自动优化.
简而言之,如果数据库可以做到这一点,数据库应该几乎总是这样做.
Pet*_*ans 10
在假设的情况下,你实际上在你的应用程序的内存中获取记录,然后mysql仍将击败你的应用程序的裤子,因为如果你正确配置你的数据库它将无法排序.
我想要在一个包含1个Mio记录的表中进行排序,您将提供索引,该索引通常实现为B-Tree,其中Mysql可以遍历并获取排序结果.
有时,如果您可以避免“使用临时;使用文件排序”,那么这是值得的,尽管我还没有进行广泛的测试。
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)
当然,如果您返回的行数超过几百行,您就不想这样做。
| 归档时间: |
|
| 查看次数: |
9769 次 |
| 最近记录: |