来自不同表的MySQL UPDATE状态

时间:2011-05-19 21:48:18

标签: mysql sql sql-update

我有一个包含相当少量数据(25k行)的文章表。该表具有已发布的列(布尔值),需要根据外部源中的数据状态进行更新。

首先我在所有文章上设置已发布= 0。然后我将feed数据加载到临时表中,只有文章ID并发布= 1.我想将发布状态设置回临时表中具有ID的所有文章中的1个(临时表仅包含已发布的文章) - 默认情况下,如果它不在Feed中,则需要取消发布。

现在我正在使用它:

UPDATE articles a
LEFT JOIN data_temp b
ON a.id = b.id
SET a.published = 1
WHERE b.id IS NOT null

这样可行,但它真的很慢(比如我的开发服务器上的速度慢了200秒)。似乎必须有一种方法可以很快地完成这项工作。谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

您是否在两个表的两个ID列上有索引?如果没有,这可能会加速加入。

答案 1 :(得分:0)

UPDATE articles SET published = 1 WHERE id IN (SELECT id FROM data_temp)

因为它缓存了子查询的结果,所以它应该非常快......