表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分钟)。
是否有更好更快的方式来更新它?
答案 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的历史速度更快。