sql >> Database teknologi >  >> RDS >> Mysql

Hvorfor tager ActiveRecord destroy_all så lang tid?

Når man graver dybere i dette, ser det ud til, at det er sletningen fra comments array, der tager meget lang tid. Records, der slettes, fjernes derefter fra arrayet her .

Simulerer vi dette med et stort array, får vi den samme langsomme adfærd:

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 kunne sandsynligvis optimeres til at lave en Array#clear i tilfælde af en destroy_all ...



  1. Django+Postgres:aktuelle transaktion afbrydes, kommandoer ignoreret indtil slutningen af ​​transaktionsblok

  2. mysql tæller ind i PHP-variablen

  3. Sådan falder du bordet i oracle

  4. Mysql-adgang nægtet på grund af brugerfejl?