在Rails中,您可以找到使用Model.size和的记录数Model.count。如果您正在处理更复杂的查询,那么使用一种方法优于另一种方法是否有任何优势?他们有什么不同?例如,我有用户的照片。如果我想显示一个用户表和他们有多少张照片,那么运行的实例user.photos.size会更快还是更慢user.photos.count?谢谢!
3 回答
紫衣仙女
TA贡献1839条经验 获得超15个赞
正如其他答案所述:
count
将执行SQLCOUNT
查询length
将计算结果数组的长度size
将尝试选择最合适的两个,以避免过多的查询
但还有一件事。我们注意到一个size
行为不同count
/ length
完全不同的情况,我想我会分享它,因为它很少被忽视。
如果您
:counter_cache
在has_many
关联上使用a ,size
将直接使用缓存计数,而不是进行额外查询。class Image < ActiveRecord::Base belongs_to :product, counter_cache: trueendclass Product < ActiveRecord::Base has_many :imagesend> product = Product.first # query, load product into memory> product.images.size # no query, reads the :images_count column> product.images.count # query, SQL COUNT> product.images.length # query, loads images into memory
Rails指南中记录了这种行为,但我要么第一次错过它,要么忘了它。
- 3 回答
- 0 关注
- 682 浏览
添加回答
举报
0/150
提交
取消