php排序是否比mysql更好;以“订购”方式订购;?
我想知道,在性能方面,考虑到mysql select对记录非常多(>1.000.000)的表进行排序,使用sql“order by”或使用经典编程排序算法对查询后的结果进行排序是否更好。。。有人有什么建议吗php排序是否比mysql更好;以“订购”方式订购;?,mysql,performance,sorting,Mysql,Performance,Sorting,我想知道,在性能方面,考虑到mysql select对记录非常多(>1.000.000)的表进行排序,使用sql“order by”或使用经典编程排序算法对查询后的结果进行排序是否更好。。。有人有什么建议吗 坦克,把手放下。它为此进行了优化,并且可以利用索引。在PHP中这样做会很糟糕(而且你会很快达到内存限制)。如果你真的在应用程序的内存中获得了记录,那么mysql仍然会打败你的应用程序,因为如果你正确配置了数据库,它就不必排序 如果您想在一个包含1百万条记录的表中进行排序,您可以在索引中提供,
坦克,把手放下。它为此进行了优化,并且可以利用索引。在PHP中这样做会很糟糕(而且你会很快达到
内存限制)。如果你真的在应用程序的内存中获得了记录,那么mysql仍然会打败你的应用程序,因为如果你正确配置了数据库,它就不必排序
如果您想在一个包含1百万条记录的表中进行排序,您可以在索引中提供,该索引通常作为B树实现,Mysql可以在其中遍历并获得排序结果。Mysql将获胜。除了列出的其他原因之外,还有一个原因是,假设记录已经在数据库中,您不必将它们从数据库中复制出来进行排序。分页或子索引将使它们变得简单并自动优化
简而言之,如果DB能做到这一点,那么DB几乎总是应该做到的。您将一个系统与一个用优化C实现的方法进行比较,这个方法就是为了完成这一任务,而另一个方法将用解释性脚本语言实现
基本上,用C编写的任何函数都比用PHP编写的等效函数快得多,速度是10到100倍
如前所述,毫无疑问,正确配置数据库并让它完成工作要高效得多。有时,如果您可以避免“使用临时;使用文件排序”,那么这是值得的,尽管我没有做过大量的测试
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
在ruby中,我不要求mysql按名称排序,而是按名称排序
results.sort_by {|u| u.name.downcase}
得到的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
当然,如果返回的行数超过几百行,则不希望执行此操作。+1-传输数据进行排序比在数据库上执行此操作要昂贵得多。