sql >> Database >  >> RDS >> Mysql

Waarom duurt ActiveRecord destroy_all zo lang?

Als we hier dieper op ingaan, lijkt het erop dat het de verwijdering is uit de comments array die erg lang duurt. Records die worden verwijderd, worden vervolgens verwijderd uit de array hier .

Als we dit met een grote array simuleren, krijgen we hetzelfde trage gedrag:

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 kan waarschijnlijk worden geoptimaliseerd om een ​​Array#clear . te doen in het geval van een destroy_all ...



  1. MYSQL - tel het aantal rijen in elke tabel

  2. Standaard MySQL-tekenset wijzigen in UTF-8 in my.cnf?

  3. fout bij invoegen in tabel met in plaats van trigger van entiteitsgegevensframework

  4. De beste manier om te testen of een rij bestaat in een MySQL-tabel