Mysql
 sql >> база данни >  >> RDS >> Mysql

Защо ActiveRecord destroy_all отнема толкова време?

Ако ровим в това по-дълбоко, изглежда, че това е изтриването от comments масив, който отнема много време. След това записите, които са изтрити, се премахват от масива тук .

Симулирайки това с голям масив, получаваме същото бавно поведение:

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 вероятно може да бъде оптимизиран за извършване на Array#clear в случай на destroy_all ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP рекурсивната функция за изтриване на всички дъщерни възли причинява препълване на стека

  2. php връща недефинирано свойство

  3. Използване на MySQL клиентски приложения

  4. Как да наложа уникално ограничение в MySQL?

  5. MySQL:Времето за изчакване на заключване е превишено