约束find_each

时间:2012-11-07 21:33:29

标签: ruby-on-rails

我有一个选择语句,

SELECT `metrics`.* 
FROM `metrics` 
WHERE `metrics`.`engine` = 0 
  AND (`metrics`.connection_id = 27874) 
  AND (`metrics`.`id` > 181586235) 
ORDER BY `metrics`.`id` ASC LIMIT 1000

是由关系(例如find_each)上的metric.engines.find_each生成的。此select语句在每次运行时扫描1500万条记录。

我想通过告诉查询只查找一系列metrics.id s(例如metrics.id > 1 AND metrics.id < 1000)来使数据库更轻松。

有没有办法用find_each执行此操作?

1 个答案:

答案 0 :(得分:1)

find_each可以应用于所有finder方法的范围:

Metric.where("metrics.id between 1 and 1000"]).find_each { ... }

编辑:如果您需要处理所有记录但又不想一次加载所有记录,则可以使用find_in_batches方法:

Metric.find_in_batches do |batch|
  batch.each { ... }
end