【发布时间】:2015-01-12 11:02:19
【问题描述】:
我有一个表 citations 有 500 万行,其中包含以下信息:
Paperkey1 | Year1 | Paperkey2 | Year2
100 20
200 90
300 80
另一个表pub_year 大约有 300 万行,包含以下信息:
Paperkey | Year
100 2001
200 2002
20 2003
90 2004
80 2005
我想通过从表 pub_year 中获取年份值来更新表 citations。我使用了以下查询,但它已经运行了 3 个多小时,但仍未完成。
update citations T2
join pub_year T1 on T2.paperkey1= T1.paperkey
set T2.year1 = T1.year;
有没有人知道它花费太长时间的主要原因是什么?如果我继续让它运行,我不确定它是否会完成。还是我的查询有问题? paperkey 字段都是 varchar,而 year 字段都是整数。谢谢。
这是运行 EXPLAIN 后的更新:
【问题讨论】:
-
你在加入的列上有索引吗?
-
@barmar 我唯一拥有的是纸钥匙,这是我从原始数据集中获得的钥匙。我从来没有尝试过对此应用索引。你的意思是我必须使用索引转换纸键吗?
-
运行
EXPLAIN SELECT * FROM citations T2 JOIN pub_year T1 ON T2.paperkey1 = T1.paperkey并使用结果更新问题。 -
@axiac 我用解释查询结果截图更新了问题
-
有paperkey3吗?
标签: mysql performance jointable