Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi ActiveRecord destroy_all prend-il si longtemps ?

En creusant plus profondément, il semble que ce soit la suppression des comments tableau qui prend très longtemps. Les enregistrements supprimés sont ensuite supprimés du tableau ici .

En simulant cela avec un grand tableau, nous obtenons le même comportement lent :

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 pourrait probablement être optimisé pour faire un Array#clear dans le cas d'un destroy_all ...