有没有一种方法可以不使用脚本来运行UPDATE,它不会通过一次只执行一定数量的行来减慢数据库的速度?
我正在表演
UPDATE .. SET .. FROM .. INNER JOIN .. ON ... WHERE
它将在一个非常大的表中更新3,171行。
我不想锁定数据库或减慢速度。有什么想法吗?
注:
根据用于UPDATE的MySQL文档:对于多表语法,UPDATE更新table_references中指定的满足条件的每个表中的行。在这种情况下,不能使用ORDER BY和LIMIT。
我正在执行INNER JOIN并且不允许使用LIMIT,使用LIMIT作为解决方案在这种情况下不起作用。
答案 0 :(得分:5)
信不信由你,你可以使用LIMIT
!
UPDATE mytable SET ... WHERE ... LIMIT 10;
我知道这听起来很奇怪,而且它是非确定性的,但它非常方便!
但是,要更新加入,限制不支持。但是,有一个解决方案!
使用变量来控制更新的行数。以下是它的工作原理:
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';
这里我正在更新符合连接条件的第一个/后一个100行 - 您可以将其设置为您喜欢的任何数字。
答案 1 :(得分:1)
如果可能,您可以先选择要更新的行的ID,然后在ID的这个子集上运行更新查询
Update tbl set MyKey = 'Updated' where ID between 1000 AND 2000
答案 2 :(得分:1)