Mysql Rake任务太慢了

Mysql Rake任务太慢了,mysql,ruby-on-rails,ruby,performance,rake,Mysql,Ruby On Rails,Ruby,Performance,Rake,我有一个rake任务,它将多个表中的所有信息累积到一个表中,每个表大约有200000行: task :migrate_all_info_tables_to_one => :environment do profiles = Profile.all profiles.each do |profile| basic_info_items = profile.basic_info_items basic_info_items.each do |item|

我有一个rake任务,它将多个表中的所有信息累积到一个表中,每个表大约有200000行:

task :migrate_all_info_tables_to_one => :environment do
    profiles = Profile.all
    profiles.each do |profile|
      basic_info_items = profile.basic_info_items
      basic_info_items.each do |item|
        info = InfoItem.find_or_initialize_by_kind_and_value_and_link_and_description(:kind => 'info', :value => item.parameter, :link => item.link != 'none' ? item.link : nil, :description => item.value)
        profile.info_items << info
      end

      cities = profile.cities
      cities.each do |city|
        city = InfoItem.find_or_initialize_by_kind_and_value_and_link_and_description(:kind => 'city', :value => city.title, :link => city.link != 'none' ? city.link : nil, :description => city.description)
        profile.info_items << city
      end

      histories = profile.histories
      histories.each do |item|
        info = InfoItem.find_or_initialize_by_kind_and_value_and_link_and_description(:kind => 'history', :value => item.year, :link => item.link != 'none' ? item.link : nil, :description => item.event)
        profile.info_items << info
      end

      contacts = profile.contacts
      contacts.each do |item|
        info = InfoItem.find_or_initialize_by_kind_and_value_and_link_and_description(:kind => 'contact', :value => item.parameter, :link => item.link != 'none' ? item.link : nil, :description => item.value)
        profile.info_items << info
      end
    end
  end
task:migrate_all_info_tables_to_one=>:environment do
profiles=Profile.all
配置文件。每个do |配置文件|
基本信息项=配置文件。基本信息项
基本信息项目。每个do项目|
info=InfoItem。通过种类和值以及链接和描述查找或初始化(:种类=>info',:值=>item.parameter,:链接=>item.link!='none'?item.link:nil,:描述=>item.value)
profile.info_项目'city',:value=>city.title,:link=>city.link!='没有?city.link:nil,:description=>city.description)
profile.info_项目'历史',:value=>item.year,:link=>item.link!='没有?item.link:nil,:description=>item.event)
profile.info_items'contact',:value=>item.parameter,:link=>item.link!='没有?item.link:nil,:description=>item.value)

profile.info_items如果您在配置文件上有相关记录,并且在循环所有配置文件时访问这些记录,则ActiveRecord可能会为每个配置文件执行单独的选择,包括开始和提交。即使每次选择都非常快,这也会减慢速度


请查看有关快速加载关联的部分。

为了提高效率,您可以快速加载脚本中使用的配置文件关系,请使用:

Profile。包括(:基本信息项目,:城市,:历史,:联系人)。全部

而不是
Profile.all


您可能还想使用
Profile。查找每个
而不是
Profile.all
,以避免在内存中加载所有配置文件。

您是否对其进行了分析以查看占用的时间?