首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL中更新和两个表的性能

问MySQL中更新和两个表的性能
EN

Stack Overflow用户
提问于 2015-05-16 21:35:54
回答 1查看 39关注 0票数 0

我有两个表,TABLE1和TABLE2,每个表都有几百万行。基于ID更新TABLE1中的列,该ID具有TABLE2中的特定功能。

请有人向我解释一下,为什么下面的第二个解决方案需要30秒,而第一个解决方案在5个小时后甚至没有完成?我认为需要创建一个新表并在更新完成后删除它的代码不是一个好的编码风格。但在这种情况下速度要快得多。有推荐吗?

(1)永远需要:

UPDATE TABLE1 SET TABLE1.MYCOLUMN = 1 WHERE TABLE1.ID IN (SELECT distinct(ID) FROM TABLE2 where .... );

(2)需要30秒:

CREATE TABLE TABLE3 AS (SELECT distinct(ID) FROM TABLE2 where ....); ALTER TABLE TABLE3 ADD primary key(ID); UPDATE TABLE1 SET TABLE1.MYCOLUMN = 1 WHERE TABLE1.ID IN (SELECT * FROM TABLE3);

EN

回答 1

Stack Overflow用户

发布于 2015-05-16 22:06:05

一般来说,WHERE IN (some query returning lots of rows)表现很差。尽管优化器应该能够将其转换为一个联接,但通常不会,这意味着整个结果集必须存储在内存中,不会被索引。

尝试使用mysql的多表更新语法:

代码语言:javascript
复制
UPDATE TABLE1
JOIN TABLE2 ON TABLE1.ID = TABLE2.ID
SET TABLE1.MYCOLUMN  = 1

确保TABLE1.ID上有索引,TABLE2.ID上有索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30281021

复制
相关文章

相似问题

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