Ruby on rails RubyonRails动态记录效率
此代码应通过对其“名称”值应用筛选器来更新整个表: 我是Ruby on Rails的新手,我发现很有趣,我的选择查询被分成了单行选择:Ruby on rails RubyonRails动态记录效率,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,此代码应通过对其“名称”值应用筛选器来更新整个表: 我是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 (`en
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提供的一种优化——只在需要时(每个周期)选择一行,而不是一次选择所有条目
然而,在这种情况下,它真的更有效吗?我的意思是,如果我的数据库表中有1000条记录,那么进行1000次查询比一次查询更好吗?如果不是,如何强制Rails在每个查询中选择多行
另一个问题是:不是所有的行都被这个查询更新。如果提供的值与已经存在的值相同(换句话说,如果entry.name==sanitize(entry.name)),Rails是否会忽略更新查询
这将获取所有条目(每个查询100条)并公开每个条目以供您选择
如果属性没有改变,Rails将不会执行更新查询。ActiveRecord是一个抽象层,但是在执行某些操作(特别是涉及大型数据集的操作)时,了解抽象层下面发生的事情是很有用的 对于所有的抽象来说,这几乎都是正确的。(参见Joel Spolsky关于泄漏抽象的经典文章:) 为了处理这里的情况,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
...
Entry.find_each do |entry|
#...
end