[解決済み] 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)
関連
-
Mysqlデータベースの手動および定期的なバックアップ手順
-
[解決済み】MySQLのエラーコードです。MySQL WorkbenchでUPDATE中に1175のエラーが発生しました。
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] MySQLでコマンドラインを使用してユーザーアカウントのリストを取得するにはどうすればよいですか?
-
[解決済み] MySQLのクエリ結果をCSV形式で出力するにはどうすればよいですか?
-
[解決済み] ブーリアン値を格納するために使用するMySQLデータ型
-
[解決済み] MySQLテーブルへの挿入または存在する場合の更新
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ジョイントインデックスのためのmysqlの条件とインデックスが失敗するための条件
-
MySQL演算子(and, or, in, not)の具体的な使用方法
-
SQL基本クエリステートメント
-
MySQLデータ型の詳細
-
MySQL インタビューの質問 - ハッシュインデックスを設定する方法
-
MySQLの悲観的ロックと楽観的ロックの実装スキーム
-
[解決済み】MySQLで「すべての派生テーブルは独自のエイリアスを持つ必要があります」というエラーは何ですか?
-
[解決済み] [GROUP BY句に含まれるか、集約関数で使用される必要があります。
-
'INSERT文はFOREIGN KEY制約「FK_TourismReservation_Users」と競合していました。その
-
[解決済み] ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセス拒否 - 特権がない?