此代码应通过应用过滤器,以它的“名字”值更新整个表:Ruby on Rails的ActiveRecord的效率
entries = select('id, name').all
entries.each do |entry|
puts entry.id
update(entry.id, { :name => sanitize(entry.name) })
end
我非常新的Ruby on Rails和觉得它很有趣,我选择查询被分为单列选择:
SELECT `entries`.* FROM `entries` WHERE (`entries`.`id` = 1) LIMIT 1
SELECT `entries`.* FROM `entries` WHERE (`entries`.`id` = 2) LIMIT 1
SELECT `entries`.* FROM `entries` WHERE (`entries`.`id` = 3) LIMIT 1
...
根据我的理解,它是一种优化的,由Rails的规定 - 在一次Select的需要,只有当它一排(每个周期),而不是所有条目。
但是,在这种情况下它真的更有效吗?我的意思是,如果我的数据库表中有1000条记录 - 比单个数据库更容易创建1000条查询吗?如果没有,我如何强制Rails为每个查询选择多行?
另一个问题是:并非所有行都由此查询更新。如果提供的值与已存在的值相同(换句话说,如果entry.name == sanitize(entry.name)),Rails是否会忽略更新查询?