Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails动态记录效率_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails RubyonRails动态记录效率

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

此代码应通过对其“名称”值应用筛选器来更新整个表:

我是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提供的一种优化——只在需要时(每个周期)选择一行,而不是一次选择所有条目

然而,在这种情况下,它真的更有效吗?我的意思是,如果我的数据库表中有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