SQL UPDATE查询耗时太长

时间:2015-06-04 13:35:49

标签: mysql sql

所以我对MySQL很新,我试图运行查询来更新列,如果两个表中都有一个单元格值,那么查询将永远运行(它已经运行了10分钟,现在还没有结果)。我的一张桌子大约有250,000行,另一张大约是80,000行,所以我不确定为什么这么长。我正在使用的查询是:

USE the_db;
UPDATE table1
JOIN table2
ON table2.a = table1.b
SET table1.c = "Y"; 

我已经更改了表和列的名称,但查询完全相同。我在这里看了其他答案,所有这些答案都需要很长时间。任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:3)

对于此查询:

UPDATE table1 JOIN
       table2
       ON table2.a = table1.b
    SET table1.c = 'Y'; 

您需要table2(a)上的索引:

create index idx_table2_a on table2(a);

此外,如果a的多个值与每个b匹配,那么您还可能会生成大量中间行,这会对性能产生很大影响。

如果是这种情况,则将查询短语为:

UPDATE table1
    SET table1.c = 'Y'
    WHERE EXISTS (SELECT 1 FROM table2 WHERE table2.a = table1.b);

你需要相同的索引。

查询之间的区别在于,此查询停在table2的第一个匹配行。