【发布时间】:2016-10-18 10:02:25
【问题描述】:
哪一个最适合性能?
1) 订单(数据库端计算)
2) sort_by(Ruby 端计算)
根据我的想法,sort_by 应该比order 快。因为order 是从数据库端执行的,所以它比较慢,sort_by 在得到结果后在 ruby 端执行,但是看到这个结果我很困惑。
=> 普通查询(比order 和sort_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>
=> 使用带有基准的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>
=> 使用带有基准的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>
结论:-
普通查询实时:- 6.515499990200624e-05
order实时查询:- 0.00014305600052466616
sort_by实时查询:- 0.0019228710007155314
从这个结论我们可以说:-
普通查询然后应用order查询需要太多时间。
我们必须使用order 方法来减少查询执行时间?
根据我的想法,我总是更喜欢sort_by。
哪个是最好的:(
【问题讨论】:
-
为什么你认为数据库比 Ruby慢?
-
这就像神话一样,尽可能少地从数据库端执行计算以提高性能。从语言方面执行大多数计算,如 ruby , php 以获得更好的性能。
-
优化的数据库查询几乎总是比应用程序计算快。您对 PHP 与 Ruby 的选择在这里也可能无关紧要(我们可以停止延续 ruby == 慢 的寓言吗?)—— any 应用程序中处理的关键问题语言是内存消耗。
-
我们的
users表有多少条目?提示:基准通常对于少量且没有重复的情况没有多大意义。我建议 -
6.515e-05 小于 0.000143,而不是更多——这是您分析中相当基本的错误。
标签: ruby-on-rails ruby postgresql ruby-on-rails-4 activerecord