读书人

单个update与多个update的效率差别

发布时间: 2012-12-21 12:03:49 作者: rapoo

单个update与多个update的效率区别
这段时间项目里遇到有这样一个rake,所以就把它分享了。

valid_hotels_ids = [1, 2, 3, ...]
这是一个需要update的hotel表的id数组。

法一:逐一update

    valid_hotels_ids.each do |id|      Hotel.update(id, "status = 'VALID'")    end


统计了一下。四万条数据, 15分钟, 这效率低得。

法二:批量update
    valid_hotels_ids.each_index do |index|      if index == valid_hotels_ids.length - 1        Hotel.update_all("status = 'VALID'", "id in (#{valid_hotels_ids[(index-index%500)..index].join(',')})")        break#这句要加上,不然当length为500的倍数时,下面这句也会被执行,造成重复update      end      if (index + 1) % 500 == 0        Hotel.update_all("status = 'VALID'", "id in (#{valid_hotels_ids[index - 499..index].join(',')})")      end    end


统计了一下。同样是四万条数据,半分钟不到就OK了,可见批量update的效率之高喔。

读书人网 >PowerDesigner

热点推荐