我已经在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循环?更好的查询?
用一个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.
| 归档时间: |
|
| 查看次数: |
235 次 |
| 最近记录: |