在检查另一个表时更新1000万行

时间:2016-02-05 20:39:39

标签: mysql mysqldump mysql-python

表A中有1200万行,表B中有1000万行。 现在这两个表都有一个公共字段,比如user_id。

现在我在表A中添加了一个列来添加B的主键。

所以表格就是这样的

Table A
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| user_id     | int(11)      | NO   |     | NULL    |                |
| b_id        | int (11)     | YES  | MUL | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

Table B
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| user_id     | int(11)      | NO   |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

现在我想更新表A中的b_id。为此,我编写了以下查询:

update A
set A.b_id = (select B.id from B
and A.user_id = B.user_id
);

但是即使将其编入索引并以100K的大块进行,它也需要很长时间(每次约3分钟)。

是否有更好更快的方式来更新它?

1 个答案:

答案 0 :(得分:3)

update A
SET A.b_id = B.id
FROM Table A
INNER JOIN TABLE B ON A.user_id = B.user_id

确保在user_id列上设置了索引。

尚无评论:只要没有重复数据,在Mysql中JOINS的历史速度更快。

相关问题