Article.select(:ID).collect{|a| a.ID} Article Load (2.6ms) SELECT "articles"."ID" FROM "articles"
要么
2.2.1 :006 > Article.pluck(:ID) (4.3ms) SELECT "articles"."ID" FROM "articles"
是什么赋予了?为什么AR比Ruby版本慢?
即使我对Ruby方法进行基准测试,它似乎更快:
Benchmark.measure{Article.select(:ID).collect{|a| a.ID}} Article Load (1.9ms) SELECT "articles"."ID" FROM "articles" => #<Benchmark::Tms:0x007feb12060658 @label="",@real=0.026455502957105637,@cstime=0.0,@cutime=0.0,@stime=0.0,@utime=0.020000000000000018,@total=0.020000000000000018>解决方法 您的基准测试不准确.首先,正如您所看到的,数据库端的两个执行都会触发相同的查询
SELECT "articles"."ID" FROM "articles"
因此,数据库时间应该被视为无关紧要.显然,这两个查询具有不同的执行时间,如控制台所示,但这是正常的,就好像您运行相同的查询100次执行时间每次都可能不同,因为它取决于各种变量,如机器负载,数据库状态等
由于数据库执行时间可以被认为是等效的,因此它与基准测试无关.
因此,您需要比较的是Ruby执行时间和分配.与收集它不分配ActiveRecord对象相比,Pluck应该更快,更轻量,而只返回选定的值.
如果你真的想要对这些方法进行基准测试,你应该模拟数据库时间(这显然是变量但与此基准测试无关),只有基准分配和两种不同的Ruby方法.
长话短说,采摘通常更有效率.
总结以上是内存溢出为你收集整理的ruby – ActiveRecords select(:id).collect与pluck(:id)方法:为什么纯AR“采摘”更慢?全部内容,希望文章能够帮你解决ruby – ActiveRecords select(:id).collect与pluck(:id)方法:为什么纯AR“采摘”更慢?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)