哪一个最适合"订单"和"sort_by"的表现?

Jig*_*ggs 2 ruby postgresql activerecord ruby-on-rails ruby-on-rails-4

哪一个最适合表现?

1)订单(数据库端计算)

2)sort_by(Ruby方面计算)

按照我的想法sort_by应该快order.因为order从数据库那边进行所以sort_by在得到结果之后变得慢,并且在红宝石一侧进行但是因为看这个结果所以混乱了.

=>正常查询(需要更多时间ordersort_by查询): -

> User.all
SELECT "users".* FROM "users"
#<Benchmark::Tms:0x000000089e4398 @cstime=0.0, @cutime=0.0, @label="", @real=6.515499990200624e-05, @stime=0.0, @total=0.0, @utime=0.0>
Run Code Online (Sandbox Code Playgroud)

=>使用order基准测试查询(比普通查询和sort_by查询花费更少的时间): -

> 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>
Run Code Online (Sandbox Code Playgroud)

=>使用sort_by基准进行order查询(在查询时采用更多查询,比普通查询更少的时间): -

> 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>
Run Code Online (Sandbox Code Playgroud)

结论: -

正常查询实时: - 6.515499990200624e-05

order 查询实时: - 0.00014305600052466616

sort_by 查询实时: - 0.0019228710007155314

从这个结论可以说: -

正常查询然后应用order查询需要花费太多时间.

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

我总是喜欢sort_by按照我的想法.

哪一个是最好的 :(

And*_*eko 5

数据库处理比Ruby更快.数据库处理可以很好地扩展,而Ruby的处理速度减慢与您正在处理的数据大小的增加成正比.

使用Ruby进行处理会大大增加时间和(特别是)内存消耗,并且它很容易使内存过载,并且实际上从未完成数据集"大"的处理.

使用Ruby的1_000_000行的一些计算将花费几十秒,而PostgreSQL将在秒钟内完成它.

  • 您可以通过添加适当的索引来进一步提高数据库查询的性能. (4认同)