ruby – ActiveRecords select(:id).collect与pluck(:id)方法
发布时间:2020-12-17 02:55:41 所属栏目:百科 来源:网络整理
导读:我试图从我的文章模型中获取所有ID.我可以用两种方式做到: 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" 是
我试图从我的文章模型中获取所有ID.我可以用两种方式做到:
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方法. 长话短说,采摘通常更有效率. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |