CLIスクリプトを使用して大規模なMyISAMテーブル(2,500万レコード)を更新しようとしています。テーブルが他のものによってロックされたり使用されたりしていません。MySQLアップデートCASE WHEN/THEN/ELSE
私は、レコードごとに単一の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を必要とし、永遠に終了しません。
次に、私の驚いたことに、クエリでは、指定しなかった行にNULLを配置して2500万行すべてを更新していることがわかりました。
目的は何ですか?このクエリを実行するたびに、2,500万の行を更新せずに、特定の行に対してMASS更新を行うことはできますか?あるいは私は個人的な更新をしてからコミットする必要がありますか?
'case'文に' else'を指定してください。デフォルトは 'null'です –