mysql – 更新大量记录 -​​ 性能优化

前端之家收集整理的这篇文章主要介绍了mysql – 更新大量记录 -​​ 性能优化前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个棒球工具,允许用户分析球员的历史击球统计数据.例如,在夜间条件下,A-Rod在过去7天内有多少次点击?我想扩展时间范围,以便用户可以将玩家的击球统计数据分析到365天.但是,这样做需要一些严格的性能优化.这是我目前的一套模型:

class AtBat < ActiveRecord::Base
  belongs_to :batter
  belongs_to :pitcher
  belongs_to :weather_condition

  ### DATA MODEL ###
  # id
  # batter_id
  # pitcher_id
  # weather_condition_id
  # hit (boolean)
  ##################
end

class BattingStat < ActiveRecord::Base
  belongs_to :batter
  belongs_to :recordable,:polymorphic => true # e.g.,Batter,Pitcher,WeatherCondition

  ### DATA MODEL ###
  # id
  # batter_id
  # recordable_id
  # recordable_type
  # hits7
  # outs7
  # at_bats7
  # batting_avg7
  # ...
  # hits365
  # outs365
  # at_bats365
  # batting_avg365
  ##################
end

class Batter < ActiveRecord::Base
  has_many :batting_stats,:as => :recordable,:dependent => :destroy
  has_many :at_bats,:dependent => :destroy
end

class Pitcher < ActiveRecord::Base
  has_many :batting_stats,:dependent => :destroy
end

class WeatherCondition < ActiveRecord::Base
  has_many :batting_stats,:dependent => :destroy
end

为了使我的问题保持合理的长度,让我讲述我正在做什么来更新batting_stats表而不是复制一堆代码.让我们从7天开始吧.

>检索过去7天内的所有at_bat记录.
>迭代每个at_bat记录……
>给定at_bat记录,获取相关的batter和相关的weather_condition,找到正确的batting_stat记录(BattingStat.find_or_create_by_batter_and_recordable(batter,weather_condition)),然后更新batting_stat记录.
>对击球手和投手(可录音)重复步骤3.

步骤1-4也重复其他时间段–15天,30天等.

现在我想象如果我将时间段从可管理的7/15/30扩展到7/15/30/45/60/90/180/365,那么每天运行脚本来进行这些更新是多么费力. .

所以我的问题是你如何让这个以最高水平的性能运行?

最佳答案
AR并不是真正意味着像这样进行批量处理.通过直接进入sql并执行INSERT FROM SELECT(或者可能使用为您执行此操作的gem),您可能最好不要进行批量更新.
原文链接:/mysql/434080.html

猜你在找的MySQL相关文章