大小,长度和复杂ActiveRecord的情况下计算的区别 [英] Difference between size, length and count in complicated ActiveRecord case

查看:226
本文介绍了大小,长度和复杂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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆