大小,长度和复杂ActiveRecord的情况下计算的区别 [英] Difference between size, length and count in complicated ActiveRecord case
本文介绍了大小,长度和复杂ActiveRecord的情况下计算的区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
[10]撬(主)> r.respondents.select(:名称).uniq.size
(1.1ms)SELECT DISTINCT COUNT(答卷。域名)从答卷
INNER JOIN值ON答卷。ID=值。respondent_idWHERE
值,round_id= 37 => 495
[11]撬(主)> r.respondents.select(:名称).uniq.length
投诉负载(1.1ms)SELECT DISTINCT的名字从答卷
INNER JOIN值ON答卷。ID=值。respondent_idWHERE
值,round_id= 37 => 6
为什么在了每个查询返回的区别是什么?
解决方案
.Count之间#=>这个总是在数据库上触发一个SELECT COUNT(*)
.size#=>如果集合已经被加载,推迟到可枚举#大小,否则不会在SELECT COUNT(*)
.length#=>总是加载的集合,然后委托给可枚举#大小
[10] pry(main)> r.respondents.select(:name).uniq.size
(1.1ms) SELECT DISTINCT COUNT("respondents"."name") FROM "respondents"
INNER JOIN "values" ON "respondents"."id" = "values"."respondent_id" WHERE
"values"."round_id" = 37 => 495
[11] pry(main)> r.respondents.select(:name).uniq.length
Respondent Load (1.1ms) SELECT DISTINCT name FROM "respondents"
INNER JOIN "values" ON "respondents"."id" = "values"."respondent_id" WHERE
"values"."round_id" = 37 => 6
Why the difference in what each query returns?
解决方案
.count #=> this always triggers a SELECT COUNT(*) on the database
.size #=> if the collection has been loaded, defers to Enumerable#size, else does the SELECT COUNT(*)
.length #=> always loads the collection and then defers to Enumerable#size
这篇关于大小,长度和复杂ActiveRecord的情况下计算的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文