所以我对MySQL很新,我试图运行查询来更新列,如果两个表中都有一个单元格值,那么查询将永远运行(它已经运行了10分钟,现在还没有结果)。我的一张桌子大约有250,000行,另一张大约是80,000行,所以我不确定为什么这么长。我正在使用的查询是:
USE the_db;
UPDATE table1
JOIN table2
ON table2.a = table1.b
SET table1.c = "Y";
我已经更改了表和列的名称,但查询完全相同。我在这里看了其他答案,所有这些答案都需要很长时间。任何帮助将不胜感激,谢谢。
答案 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
的第一个匹配行。