Reputation: 4787
When creating a model Deal, I use an after_create to create 10 prizes on the prize table.
Is there a performance difference or any performance-related (like garbage colleciton maybe) that would help me decide between a and B
A
after_create :create_prizes
def create_prizes
300000.times do
prizes = self.prizes.create(:deal_id => self.id, :admin_user_id => self.admin_user_id)
end
end
B
after_create :create_prizes
def create_prizes
300000.times do
prizes = Prize.create(:deal_id => self.id, :admin_user_id => self.admin_user_id)
end
end
B
Note that when the Admin creates a deal, it will create a very large number of prizes (up to 300,000).
Thanks for any help,
Mathieu
Upvotes: 0
Views: 58
Reputation: 976
Option B should be slightly faster as AR does't need to traverse the relations to find the foreign key. However, inserting 300,000 records will be slow either way.
Consider generating a SQL INSERT statement or passing an array to create.
Prize.create([{deal_id: 1}, {deal_id: 2}])
Upvotes: 2