sql >> Base de Datos >  >> RDS >> Mysql

¿Por qué ActiveRecord destroy_all tarda tanto?

Profundizando en esto, parece que es la eliminación de los comments matriz que toma mucho tiempo. Los registros que se eliminan luego se eliminan de la matriz aquí .

Simulando esto con una matriz grande, obtenemos el mismo comportamiento lento:

1.9.3-p194 :001 > require 'benchmark'; require 'ostruct'
 => true 
1.9.3-p194 :002 > i = 0; a = []
 => [] 
1.9.3-p194 :003 > 35_000.times { i+=1; a << OpenStruct.new(value: i) }
 => 35000 
1.9.3-p194 :004 > puts Benchmark.measure { a.each { |i| a.delete(i) } }
623.560000   0.820000 624.380000 (625.244664)

ActiveRecord probablemente podría optimizarse para hacer un Array#clear en el caso de un destroy_all ...