【发布时间】:2016-02-05 20:39:38
【问题描述】:
表 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 分钟)。
有没有更好更快的更新方式?
【问题讨论】:
-
mysql 或 sql-server,使用正确的标签
-
加入不是更贵。
-
b.user_id是否已编入索引?它看起来不像。(b.user_id, b.id)上的综合索引应该会有所帮助 -
@FuzzyTree 是的
-
select B.id from B and A.user_id = B.user_id——这种语法还能用吗……?
标签: mysql mysqldump mysql-python