我正在尝试根据另一个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)
字段中存储的字符串)使用 id
从 tobeupdated
更新 id
中的 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 - How can I update a table with values from another table?,但它并没有真正帮助 . 有任何想法吗?
在此先感谢帮助MySQL新手!
2 回答
应该这样做,而且它的确与你的完全一致 . 但是,我更喜欢连接的'JOIN'语法而不是多个'WHERE'条件,我认为它更容易阅读
至于跑步慢, table 有多大?您应该在
tobeupdated.value
和original.value
上有索引编辑:我们也可以简化查询
USING
是连接的两个表具有相同名称key
(例如id
)的简写 . 即等于加入 - http://en.wikipedia.org/wiki/Join_(SQL)#Equi-join这取决于这些表的用途,但您可以考虑在插入和更新时将触发器放在原始表上 . 插入或更新完成后,仅基于原始表中的一个项目更新第二个表 . 它会更快 .