sql >> Databasteknik >  >> RDS >> Mysql

Varför tar ActiveRecord destroy_all så lång tid?

Om man gräver djupare i detta verkar det vara borttagningen från comments array som tar mycket lång tid. Poster som raderas tas sedan bort från arrayen här .

Simulerar detta med en stor array får vi samma långsamma beteende:

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 skulle förmodligen kunna optimeras för att göra en Array#clear i fallet med en destroy_all ...



  1. MariaDB FIELD() vs FIND_IN_SET():Vad är skillnaden?

  2. Verktyg för att arbeta med lagrade procedurer i Oracle, i ett team?

  3. Välj var radnummer =radnummer

  4. Mountain Lion Postgres kunde inte ansluta