首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以最大的性能在MySQL中执行大规模更新

如何以最大的性能在MySQL中执行大规模更新
EN

Stack Overflow用户
提问于 2013-12-25 15:53:07
回答 3查看 442关注 0票数 0

我想对SQL数据库进行大规模更新。基本上,我的设想是:

我有一个叫“优先”的领域。在某些事务处理期间,我必须更新所有记录的这个字段,大约有200万条记录。是否有一个MySQL语句可以批量执行所有更新并提供最大的性能?

例:像这样的事:

代码语言:javascript
复制
update my_model set priority = p1,p2,p3,p4.. where id = id1,id2,id3,id4..

为此,我使用Rails,所以我查看原始SQL查询。

另外,在附带说明中,在Rails中执行大容量更新的最有效方法是什么(除了使用事务和update_all)

EN

回答 3

Stack Overflow用户

发布于 2013-12-25 15:59:44

可能更好的选择是选择存储过程。我很久以前就有过这种情况,我们用java来处理准备好的语句。我们正在与各种-xm做斗争,但是即使在增加了4GB内存之后,我们也没能更快地完成任务。我们决定将一次处理数百万条记录的所有数据库相关代码传输到存储过程(在我的例子中,是oracle pl/sql ),色牢度提高了约400% - 800%。(从4小时减少到半小时)。

票数 1
EN

Stack Overflow用户

发布于 2013-12-25 16:54:43

您可以定义事务块

在您的示例中,您似乎希望设置与ID相同的priority

代码语言:javascript
复制
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'")

票数 1
EN

Stack Overflow用户

发布于 2013-12-25 17:23:57

你是在找这样的东西吗。

代码语言:javascript
复制
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
END
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20774484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档