Mysql 在检查另一个表时更新1000万行
表A中有1200万行,表B中有1000万行。 现在这两个表都有一个公共字段,比如user_id 现在,我在表a中添加了一列来添加B的主键 桌子是这样的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 | +-------------+---------
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
–这种语法是否有效…?在这种情况下,由于我们有大量数据,连接不是非常昂贵。另外,我还担心内存占用。我花了很多时间来找到正确的查询。这个效果最好。谢谢布莱克