sql >> Databáze >  >> RDS >> Mysql

Proč ActiveRecord cancel_all trvá tak dlouho?

Když se v tom ponoříme hlouběji, zdá se, že jde o vymazání z comments pole, které trvá velmi dlouho. Záznamy, které jsou odstraněny, jsou poté odstraněny z pole zde .

Když to simulujeme s velkým polem, dostaneme stejně pomalé chování:

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 by pravděpodobně mohl být optimalizován tak, aby dělal Array#clear v případě destroy_all ...



  1. Jak používat „sp_server_info“ uloženou proceduru v SQL Server

  2. SQL Server, nelze vložit hodnotu null do pole primárního klíče?

  3. Oprava Přístup odepřen pro uživatele 'root'@'localhost' pro phpMyAdmin

  4. Vícenásobné výběrové příkazy v jediném dotazu