我必须根据电子邮件更新表中字段的值(250 000条记录)和来自另一个表(10 000 000条记录)的字段值...Mysql更新查询超过1000万条记录
我已经试过: UPDATE table1的T1,T2表2 SET = t1.country t2.country WHERE t1.email = t2.email
但我得到 “正在执行查询” 一个永远。
我应该使用什么查询?
感谢
我必须根据电子邮件更新表中字段的值(250 000条记录)和来自另一个表(10 000 000条记录)的字段值...Mysql更新查询超过1000万条记录
我已经试过: UPDATE table1的T1,T2表2 SET = t1.country t2.country WHERE t1.email = t2.email
但我得到 “正在执行查询” 一个永远。
我应该使用什么查询?
感谢
这将是采用JOIN
的好机会。
UPDATE table1 as t1
JOIN table2 t2 ON t1.email = t2.email
SET t1.country = t2.country
它仍然需要一段时间为您的查询处理,但它应该减少了大量的时间。
谢谢,但这给了我一个Sql语法错误... – 2012-01-13 17:44:13
狮子座,我错过了'作为t1'在'更新'部分。丹善意修复它。 – 2012-01-16 13:15:31
我在查询中看不到明显的错误(并且数据库在此情况下会产生错误)。所以我们正在考虑的问题是加快执行更新。是您的两个电子邮件字段中的一个索引?如果不是,你可以添加一个索引并重试吗?例如。 ALTER TABLE table2 ADD INDEX(email)
我也很好奇表现。我并不是很熟悉MySQL,但我希望看到相当于解释计划/执行路径以及成本,索引使用等等。 – Dan 2012-01-13 18:02:31
性能调整非常棘手。它取决于你的硬件,系统负载等。从上面提取“小批量”:你可以尝试UPDATE table1 t1,table2 t2 SET t1.country = t2.country WHERE t1.email = t2.email LIMIT 10 – 2012-01-13 18:10:01
This将只更新10条记录。验证结果。如果有效,您只需等到查询完成即可。 – 2012-01-13 18:11:46
这是一次性的事情吗?或者你是否会一遍又一遍地做这个事情,比如说可能是晚上的事情? – davogotland 2012-01-13 17:35:19
是的,这是一次性的东西 – 2012-01-13 17:43:45
我会写一个小应用程序,慢慢地逐行执行,并通过打印出它已经走了多远来更新用户,以便主管可以检查它是否仍在运行。 – davogotland 2012-01-13 17:45:58