1. ホーム
  2. mysql

[解決済み] MySQL update CASE WHEN/THEN/ELSE [重複]について

2023-02-16 15:23:21

質問

私は、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 を置いていることがわかりました。

その目的は何でしょうか?このクエリを実行するたびに 2,500 万行を更新することなく、特定の行に対して MASS 更新を行うことができますか? それとも、個別に更新を行い、その後コミットしなければならないのでしょうか?

どのように解決するのですか?

これを試してみてください。

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)