ND
На одних и тех же данных, этот метод отрабатывает с двумя запросами в базу:
def kroger_get_next_line
where(merchant_id: kroger_merchant_ids).find_each do |store_item|
yield KrogerCsvParser.generate_line_params(store_item)
end
end
======
StoreItem Load (8.1ms) SELECT
store_items
.* FROM store_items
WHERE store_items
.merchant_id
IN ('2706', '2707', '2774', '2775', '2776', '2777', '2778', '2779', '2780', '2781', '3883') ORDER BY store_items
.id
ASC LIMIT 1000StoreItem Load (0.5ms) SELECT
store_items
.* FROM store_items
WHERE store_items
.merchant_id
IN ('2706', '2707', '2774', '2775', '2776', '2777', '2778', '2779', '2780', '2781', '3883') AND store_items
.id
> 1000 ORDER BY store_items
======Второй метод:
def kroger_inventory_gnlотрабатывает с N+1 количеством запросов. Не пойму, как оптимизировать второй случай?
where(merchant_id: kroger_merchant_ids).includes(:stores).find_each do |store_item|
store_item.stores.find_each do |store|
yield KrogerInventoryCsvParser.generate_line_params(store_item, store)
end
end
end