在检查另一个 table 的同时更新 1000 万行
Updating 10 million rows while having a check with another table
table A 中有 1200 万行,table B 中有 1000 万行。
现在这两个 table 都有一个公共字段,比如 user_id.
现在我在tableA中添加了一列来添加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 | |
+-------------+--------------+------+-----+---------+----------------+
现在我想更新 table 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
确保在 user_id 列上设置了索引。
尚无法发表评论:在 Mysql 中,只要没有重复数据,JOINS 历来速度就更快。
table A 中有 1200 万行,table B 中有 1000 万行。 现在这两个 table 都有一个公共字段,比如 user_id.
现在我在tableA中添加了一列来添加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 | |
+-------------+--------------+------+-----+---------+----------------+
现在我想更新 table 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
确保在 user_id 列上设置了索引。
尚无法发表评论:在 Mysql 中,只要没有重复数据,JOINS 历来速度就更快。