如何优化UPDATE查询以提高MySQL性能

6

我在MySQL数据库中有2个表...

它们非常大,现在已经有100万条记录,不久将达到500万左右

一个是求职者表,另一个是Joomla用户表

我想要将两个表的ID复制或插入到求职者表中,条件是它们的email列匹配

也就是说,jobseeker email = jos users email

我使用了下面的查询语句,但它太耗时间,在MySQL服务器上负载很重...查询会卡住,最终我总是不得不重新启动MySQL...

UPDATE  `jos_jbjobs_jobseeker` 
SET user_id =   ( SELECT jos_users.id
FROM jos_users
WHERE jos_users.email =  jos_jbjobs_jobseeker.email)
WHERE EXISTS
  ( SELECT jos_users.id
    FROM jos_users
    WHERE jos_users.email =  jos_jbjobs_jobseeker.email);

我该如何优化上面的查询以获得更好的性能?此外,我想知道是否可以分批执行,例如每次20000或40000条记录。请给出建议。

请尝试解释您的SQL语句:http://dev.mysql.com/doc/refman/5.0/en/explain.html,并发布结果。 - Francesco Laurita
2个回答

6

试试这个:

UPDATE
    jos_jbjobs_jobseeker a
    INNER JOIN jos_users b ON a.email = b.email
SET
    a.user_id = b.id

3
这个简单的查询怎么样?
UPDATE jos_jbjobs_jobseeker jjj
JOIN jos_users ju
  ON jjj.email = ju.email
SET jjj.user_id = ju.id;

我的答案与上面完全相同,只是我稍晚发布了它。 - Dmytro Shevchenko
@sony_CO:这个答案是一样的,只是不同的别名。 - Travesty3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接