计算集合时。通过大小或数量来做它会更好吗?
大小= Ruby(@foobars.size
)
Count = SQL(@foobars.count
)
我还注意到,count
再次前往数据库。
答案 0 :(得分:5)
我倾向于建议将size
用于所有事情,因为它更安全。人们使用size
减少了愚蠢的错误。
以下是它们的工作原理:
length
:length将返回数组中元素的数量,或以其他方式加载集合 - 关键点是集合将在此处加载,无论如何。因此,如果您正在使用activerecord关联,它会将元素从DB拉到内存,然后返回数字。
count
:count会发出数据库查询,所以如果你已经有了一个数组,那么对你的数据库进行无意义的调用。
size
:两个世界中最好的 - 大小检查你正在使用的类型然后使用哪个更合适(所以如果你有一个数组,它将使用长度;如果你有一个未经检索的{{1它将使用count,等等)。
来源: http://blog.hasmanythrough.com/2008/2/27/count-length-size/
答案 1 :(得分:0)
这取决于具体情况。在示例中,您显示我将使用size
,因为您已经加载了集合,并且对size
的调用将只检查数组的长度。正如您所注意到的,count
将执行额外的数据库查询,您确实希望避免这种情况。
但是,在你只想显示Foobars的数量而不显示那些对象的场景中,我会选择count
,因为它不会将实例加载到内存中,只返回记录数