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

Mysql 在检查另一个表时更新1000万行,mysql,mysqldump,mysql-python,Mysql,Mysqldump,Mysql Python,表A中有1200万行,表B中有1000万行。 现在这两个表都有一个公共字段,比如user_id 现在,我在表a中添加了一列来添加B的主键 桌子是这样的 Table A +-------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+---------

表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分钟)

有没有更好更快的更新方法

update A
SET A.b_id = B.id
FROM Table A
INNER JOIN TABLE B ON A.user_id = B.user_id
确保在用户id列上设置了索引


现在还不能评论:Mysql中的连接历史上更快,只要没有重复的数据。

Mysql或sql server,使用适当的标记。连接不会更昂贵。
b.user\u id
索引了吗?看起来不像。
(b.user\u id,b.id)
上的综合索引应该help@FuzzyTree是的,它是
从B中选择B.id,并且A.user\u id=B.user\u id
–这种语法是否有效…?在这种情况下,由于我们有大量数据,连接不是非常昂贵。另外,我还担心内存占用。我花了很多时间来找到正确的查询。这个效果最好。谢谢布莱克