【发布时间】:2020-11-14 15:24:46
【问题描述】:
我正在尝试使用 CLI 脚本更新 LARGE MyISAM 表(2500 万条记录)。该表没有被其他任何东西锁定/使用。
我认为与其对每条记录执行单个 UPDATE 查询,不如利用 CASE 功能。
id 字段是 PRIMARY。我怀疑以下查询需要几毫秒。
UPDATE `table` SET `uid` = CASE
WHEN id = 1 THEN 2952
WHEN id = 2 THEN 4925
WHEN id = 3 THEN 1592
END
你瞧,查询占用了 CPU 并且不会永远完成。
然后,令我惊讶的是,我发现查询正在更新所有 2500 万行,在我没有指定的行上放置了一个 NULL。
这样做的目的是什么?我可以在每次执行此查询时只对特定行进行 MASS 更新而不更新 2500 万行吗?还是我必须进行个别更新然后提交?
【问题讨论】:
-
当您在
case语句中未指定else时,默认为null -
只需放置一个过滤器 where 子句
标签: mysql