我想对SQL数据库进行大规模更新。基本上,我的设想是:
我有一个叫“优先”的领域。在某些事务处理期间,我必须更新所有记录的这个字段,大约有200万条记录。是否有一个MySQL语句可以批量执行所有更新并提供最大的性能?
例:像这样的事:
update my_model set priority = p1,p2,p3,p4.. where id = id1,id2,id3,id4..为此,我使用Rails,所以我查看原始SQL查询。
另外,在附带说明中,在Rails中执行大容量更新的最有效方法是什么(除了使用事务和update_all)
发布于 2013-12-25 15:59:44
可能更好的选择是选择存储过程。我很久以前就有过这种情况,我们用java来处理准备好的语句。我们正在与各种-xm做斗争,但是即使在增加了4GB内存之后,我们也没能更快地完成任务。我们决定将一次处理数百万条记录的所有数据库相关代码传输到存储过程(在我的例子中,是oracle pl/sql ),色牢度提高了约400% - 800%。(从4小时减少到半小时)。
发布于 2013-12-25 16:54:43
您可以定义事务块
在您的示例中,您似乎希望设置与ID相同的priority:
MyModel.each
[1,2,3,4,5].each do |id|
`MyModel.find(id).update_attribute(priority: id)`
end还请看一下全
示例:
Model.where(:foo => 'bar').where(:attr => 1).update_all("author = 'David'")
发布于 2013-12-25 17:23:57
你是在找这样的东西吗。
UPDATE
my_model
SET priority =
CASE
WHEN id = id1
THEN p1
WHEN id = id2
THEN p2
WHEN id = id3
THEN p3
WHEN id = id4
THEN p4
ELSE pX
ENDhttps://stackoverflow.com/questions/20774484
复制相似问题