Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum braucht ActiveRecord destroy_all so lange?

Wenn wir uns das genauer ansehen, scheint es die Löschung aus den comments zu sein Array, das sehr lange dauert. Gelöschte Datensätze werden dann aus dem Array entfernt hier .

Wenn wir dies mit einem großen Array simulieren, erhalten wir das gleiche langsame Verhalten:

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 könnte wahrscheinlich optimiert werden, um ein Array#clear durchzuführen im Fall eines destroy_all ...