一尘不染

MySQL更新CASE WHEN / THEN / ELSE

mysql

我正在尝试使用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万行吗?还是我必须先进行个别更新然后提交?


阅读 512

收藏
2020-05-17

共1个答案

一尘不染

尝试这个

UPDATE `table` SET `uid` = CASE
    WHEN id = 1 THEN 2952
    WHEN id = 2 THEN 4925
    WHEN id = 3 THEN 1592
    ELSE `uid`
    END
WHERE id  in (1,2,3)
2020-05-17