Ответ 1
Для вставок:
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, таким образом, несколько инициированных и совершенных транзакций и общая медленная производительность.