Для вставок:
ActiveRecord не выполняет массовую вставку при использовании транзакции. Однако это немного ускоряет процесс, поскольку он использует одну транзакцию для выполнения всех операторов INSERT, в отличие от одной транзакции на оператор INSERT в противном случае.
Итак:
Queue.transaction do
@queue.each do |row|
# an INSERT is done here
end
end
будет быстрее чем:
@queue.each do |row|
# an INSERT is done here
end
Для получения дополнительной информации о том, как действительно выполнять массовые вставки, ознакомьтесь с статьей .
Для удалений:
Вызов ActiveRecord delete_all
является одним оператором SQL DELETE, поэтому я думаю, вы могли бы рассматривать это как массовое удаление (нет необходимости использовать транзакцию здесь, поскольку она уже заключена в одну транзакцию ActiveRecord). Это не тот случай, когда вызывается delete
для каждой записи, что приводит к нескольким операторам SQL DELETE, таким образом, инициируется и фиксируется несколько транзакций, что в целом снижает производительность.