CASE WHEN/THEN/ELSE を使用した MySQL 更新
問題:
を試みたときCASE WHEN/THEN/ELSE ステートメント、クエリを使用して大きな MyISAM テーブルを更新するCPU を独占し、完了するまでに非常に時間がかかります。さらに、クエリで指定されていない行も含め、テーブル内のすべての行が更新されます。
説明:
この動作の理由は、MySQL が CASE ステートメントを解釈するためです。テーブル内のすべての行を更新します。どの WHEN 条件にも一致しない行には NULL 値が割り当てられます。
解決策:
この問題を回避するには、ELSE を含むようにクエリを変更する必要があります。 WHEN 条件のいずれにも一致しない行に既存の値を割り当てるステートメント。さらに、WHERE 句を使用して、更新を指定した行のみに制限できます。
修正されたクエリ:
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 CASE WHEN Update が遅く、すべての行に影響を与えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。