首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails Relation#update_all比Relation#update消耗更多的内存

Rails Relation#update_all比Relation#update消耗更多的内存
EN

Stack Overflow用户
提问于 2012-11-01 17:43:24
回答 1查看 453关注 0票数 4

Relation#update(id, attributes)文档提到“不管对象是否成功地保存到数据库中,结果对象都会被返回”,而Relation#update_all(updates, conditions = nil, options = {})声明没有实例化、回调或验证(直接的DB查询)。

运行一个简单的性能测试并将Relation#update替换为Relation#update_all,看起来内存消耗增加了。

有什么解释吗?

节选:

代码语言:javascript
运行
复制
#Before
MyModel.update(my_hash['id'], special_attrs)

#After (more memory consumed)
MyModel.where(:id => my_hash['id']).update_all(special_attrs)

#Update-2 (slightly more memory consumed than with update(id, attrs)
MyModel.update_all(special_attrs, {:id => my_hash['id']})
  • Windows (我知道)
  • JRuby 1.6.8 (1.9)
  • Rails 3.2.8

update -一些用于比较的基本数字:对于触发的大约700个update语句,差异约为0.6MB (每条语句0.8kB)

UPDATE 2 -按照@philip建议删除了AREL链接。内存占用略有减少,但MyModel.update_all(attrs, conditions)MyModel.update(id, attrs)消耗更多的内存。

EN

回答 1

Stack Overflow用户

发布于 2012-11-02 00:33:49

如果你这样做有什么区别吗?

MyModel.update_all(special_attrs, {:id => my_hash['id']})

我没有挖太远,但看起来update_all马上就把阿雷尔叫来了。我停止了对.update -> .update_attributes -> .assign_attributes的照顾,完全没有看到Arel,尽管我确信它一定会在某一时刻发挥作用。

如果我不得不猜的话,我会说这就是原因。

我想这是在一个循环的某处?否则,为什么不直接做:

MyModel.update_all(special_attrs, {:id => all_my_hash_ids_as_an_array})

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13182644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档