在750k行上执行MySQL更新查询

ed2*_*209 2 mysql sql

我已经在MySQL表中添加了一个字段.我需要使用另一个表中的值填充新列.这是我想要运行的查询:

UPDATE       table1 t1
SET          t1.user_id = 
                        (
                        SELECT   t2.user_id 
                        FROM     table2 t2 
                        WHERE    t2.usr_id = t1.usr_id
                        )
Run Code Online (Sandbox Code Playgroud)

我在239K行本地运行该查询,大约需要10分钟.在我在现场环境中这样做之前,我想问一下我的表现是否正常,即10分钟听起来合理.或者我应该以另一种方式,php循环?更好的查询?

Eri*_*ric 6

用一个UPDATE JOIN!这将为您提供本地inner join更新,而不是为每个血腥行运行子查询.它往往快得多.

update table1 t1
inner join table2 t2 on
    t1.usr_id = t2.usr_id
set t1.user_id = t2.user_id
Run Code Online (Sandbox Code Playgroud)

确保每个usr_id列都有索引.这会加快速度.

如果你有一些行不匹配,并且你想设置t1.user_id = null,你将需要做一个left join代替inner join.如果列null已经存在,并且您只是想将其更新为值t2,请使用inner join,因为它更快.

我应该提到,为子孙后代,这是MySQL的语法.其他RDBMS有不同的方法update join.