Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从“订单”和“排序依据”来看,哪一个对性能最好?_Ruby On Rails_Ruby_Postgresql_Ruby On Rails 4_Activerecord - Fatal编程技术网

Ruby on rails 从“订单”和“排序依据”来看,哪一个对性能最好?

Ruby on rails 从“订单”和“排序依据”来看,哪一个对性能最好?,ruby-on-rails,ruby,postgresql,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby,Postgresql,Ruby On Rails 4,Activerecord,哪一个最适合表演 1阶数据库端计算 2通过Ruby端计算对_进行排序 按照我的想法,排序应该是快速的,然后再排序。因为顺序是从数据库端执行的,所以速度比较慢,在得到结果后在ruby端执行排序,但看到这个结果我感到困惑 =>普通查询比按查询排序花费更多时间:- =>使用sort_by和基准进行查询比订单查询花费更多时间,比正常查询花费更少时间:- > User.all.sort_by(&:name) # Not perform `order` from database side s

哪一个最适合表演

1阶数据库端计算

2通过Ruby端计算对_进行排序

按照我的想法,排序应该是快速的,然后再排序。因为顺序是从数据库端执行的,所以速度比较慢,在得到结果后在ruby端执行排序,但看到这个结果我感到困惑

=>普通查询比按查询排序花费更多时间:-

=>使用sort_by和基准进行查询比订单查询花费更多时间,比正常查询花费更少时间:-

> User.all.sort_by(&:name) # Not perform `order` from database side so should be faster then `order`
SELECT "users".* FROM "users"
#<Benchmark::Tms:0x0000000897e5c0 @cstime=0.0, @cutime=0.0, @label="", @real=0.0019228710007155314, @stime=0.0, @total=0.0, @utime=0.0>
结论:-

正常查询实时:-6.51549990200624E-05

订单实时查询:-0.0001430560052466616

按查询进行实时排序:-0.0019228710007155314

根据这一结论,我们可以说:-

常规查询要花费太多的时间,然后再应用订单查询

我们必须使用顺序方法来减少查询执行时间

我总是喜欢按我的想法分类


哪一个是最好的:

数据库处理比Ruby快几个数量级。而且数据库处理的扩展性非常好,而Ruby的处理速度减慢与正在处理的数据大小的增加成正比

使用Ruby进行处理会大大增加时间,尤其是内存消耗,而且当数据集很大时,它很容易使内存过载,并且永远不会真正完成处理


使用Ruby对1000行进行的某些计算需要几十秒,而PostgreSQL将在几秒钟内完成。

您的第一个假设应该始终是数据库中的数据操作将比Ruby中的数据操作快得多

对于一小部分问题,您可以选择不使用数据库

例如,如果您有一个包含多个子记录的记录,并且您必须根据各种条件读取多个子行active=true、date
然而,这不应该是您的第一个假设。

为什么您希望数据库比Ruby慢?这就像神话一样,从数据库方面尽可能少地执行计算以提高性能。从语言方面执行大多数计算,如ruby、php,以获得更好的性能。优化的数据库查询几乎总是比应用程序计算更快。您对PHP与Ruby的选择在这里也可能是无关紧要的,我们可以停止延续Ruby==缓慢的寓言吗任何应用程序语言处理的关键问题是内存消耗。我们的用户表有多少个条目?提示:对于小数字和不重复的情况,基准测试通常没有多大意义。我建议6.515e-05小于0.000143,而不是更多-这是您分析中的一个基本错误。对,在数据库中排序应该更快。上面公布的基准可能是一种反常现象。考虑到Rails的预热时间,您可能需要多次执行基准测试。此外,如果您想在Ruby中轻松实现这一点,请查看基准IP。通过添加适当的索引,您可以进一步提高数据库查询的性能。
> User.order(:name)  # `order` query is perform in sql so should take more time
User Load (0.6ms)  SELECT "users".* FROM "users"   ORDER BY "users"."name" ASC
#<Benchmark::Tms:0x00000007ec48c8 @cstime=0.0, @cutime=0.0, @label="", @real=0.00014305600052466616, @stime=0.0, @total=0.0, @utime=0.0>
> User.all.sort_by(&:name) # Not perform `order` from database side so should be faster then `order`
SELECT "users".* FROM "users"
#<Benchmark::Tms:0x0000000897e5c0 @cstime=0.0, @cutime=0.0, @label="", @real=0.0019228710007155314, @stime=0.0, @total=0.0, @utime=0.0>