在检查另一个 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 历来速度就更快。