CLI スクリプトを使用して、大きな MyISAM テーブル (2,500 万レコード) を更新しようとしています。テーブルは他のものによってロック/使用されていません。
各レコードに対して単一の 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 を占有し、永久に終了しません。
その後、驚いたことに、クエリが 2,500 万行すべてを更新していて、指定していない行に NULL が設定されていることがわかりました。
その目的は何ですか?このクエリを実行するたびに 2,500 万行を更新せずに、特定の行に対して MASS 更新を行うことはできますか? それとも、個々の更新を行ってからコミットする必要がありますか?