【发布时间】:2011-08-12 20:01:05
【问题描述】:
rails/ruby 的新手(使用 rails 3 和 ruby 1.9.2),并试图摆脱一些正在执行的不必要的查询。
当我运行 each 时:
apples.to_a.each do |apple|
new_apple = apple.clone
new_apple.save!
end
我检查了 sql LOG,我看到三个 select 语句后跟一个 insert 语句。选择语句似乎完全没有必要。例如,它们类似于:
SELECT Fruit.* from Fruits where Fruit.ID = 5 LIMIT 1;
SELECT Color.* from Colors where Color.ID = 6 LIMIT 1;
SELECT TreeType.* from TreeTypes where TreeType.ID = 7 LIMIT 1;
INSERT into Apples (Fruit_id, color_id, treetype_id) 值 (6, 7, 8) RETURNING "id";
看起来,这不会花费太多时间,但是当我要运行 70k 插入时,我敢打赌,每个插入的这三个选择将占用相当多的时间。
所以我想知道以下几点:
- 这是典型的 ActiveRecord/Rails .save!方法,还是之前的开发者添加了某种自定义代码?
- 为每个项目执行的这三个选择语句会导致显着的额外时间吗?
- 如果它内置在 rails/active 记录中,是否可以轻松绕过它,如果这样可以使其更有效地运行?
【问题讨论】:
标签: sql ruby-on-rails ruby activerecord