有没有办法不使用脚本来运行UPDATE,它不会通过一次只执行一定数量的行来减慢DB的速度?
我正在表演
UPDATE .. SET .. FROM .. INNER JOIN .. ON ... WHERE
Run Code Online (Sandbox Code Playgroud)
它将在一个非常大的表中更新3,171行.
我不想锁定DB或减慢它.有任何想法吗?
注意:
根据用于UPDATE的MySQL文档:对于多表语法,UPDATE更新table_references中指定的满足条件的每个表中的行.在这种情况下,不能使用ORDER BY和LIMIT.
我正在执行INNER JOIN并且不允许使用LIMIT,使用LIMIT作为解决方案在这种情况下不起作用.
信不信由你,你可以使用LIMIT!
UPDATE mytable SET ... WHERE ... LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
我知道这听起来很奇怪,而且它是非确定性的,但它非常方便!
但是,要更新联接,不支持限制.但是,有一个解决方案!
使用变量来控制更新的行数.以下是它的工作原理:
set @i := 0;
update table1 t1
join table2 t2 on t1.keycol = t2.keycol and (@i := @i + 1) < 100
where t1.col != 'someval'
set t1.col = 'someval';
Run Code Online (Sandbox Code Playgroud)
在这里,我正在更新符合连接条件的第一个/下一个100行 - 您可以将其设置为您喜欢的任何数字.
| 归档时间: |
|
| 查看次数: |
3343 次 |
| 最近记录: |