[英]Update one MySQL table with values from another
我正在尝试根据另一个MySQL信息更新一个MySQL表。
我的original
表格如下:
id | value
------------
1 | hello
2 | fortune
3 | my
4 | old
5 | friend
和tobeupdated
表看起来像:
uniqueid | id | value
---------------------
1 | | something
2 | | anything
3 | | old
4 | | friend
5 | | fortune
我想根据value
(存储在VARCHAR(32)
字段中的字符串)使用original
id
来更新tobeupdated
中的id
。
希望更新后的表如下所示:
uniqueid | id | value
---------------------
1 | | something
2 | | anything
3 | 4 | old
4 | 5 | friend
5 | 2 | fortune
我有一个有效的查询,但是非常慢:
UPDATE tobeupdated, original
SET tobeupdated.id = original.id
WHERE tobeupdated.value = original.value
这使我的CPU耗尽,最终导致超时,并且仅执行了一部分更新(有数千个要匹配的值)。 我知道按value
匹配会很慢,但这是我必须将它们匹配在一起的唯一数据。
有没有更好的方法来更新这样的值? 如果可以更快的速度,我可以为合并结果创建第三个表?
我尝试过MySQL-如何使用另一个表中的值更新表? ,但并没有真正的帮助。 有任何想法吗?
在此先感谢您帮助MySQL新手!
UPDATE tobeupdated
INNER JOIN original ON (tobeupdated.value = original.value)
SET tobeupdated.id = original.id
那应该做到,实际上它确实在做您的工作。 但是,我更喜欢使用“ JOIN”语法进行连接,而不是使用多个“ WHERE”条件,我认为它更易于阅读
至于运行缓慢,表有多大? 您应该在tobeupdated.value
和original.value
上具有索引
编辑:我们还可以简化查询
UPDATE tobeupdated
INNER JOIN original USING (value)
SET tobeupdated.id = original.id
当联接的两个表都具有相同的命名key
例如id
时, USING
是简写形式。 即一个等值联接-http: //en.wikipedia.org/wiki/Join_( SQL)#Equi-join
这取决于这些表的用途,但是您可以考虑在插入和更新时在原始表上放置触发器。 插入或更新完成后,仅根据原始表中的一项更新第二个表。 这样会更快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.