最好使用尺寸或数量集合?

时间:2012-08-10 01:39:07

标签: sql ruby-on-rails ruby-on-rails-3 postgresql-9.1

计算集合时。通过大小或数量来做它会更好吗?

大小= Ruby(@foobars.size

Count = SQL(@foobars.count

我还注意到,count再次前往数据库。

2 个答案:

答案 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,因为它不会将实例加载到内存中,只返回记录数