ホームページ >データベース >mysql チュートリアル >MySQL MyISAM UPDATE が CASE WHEN で失敗するのはなぜですか? どうすれば修正できますか?
CASE WHEN/THEN/ELSE を使用した MySQL MyISAM テーブルの更新
Q: を使用して大規模な MyISAM テーブルの特定の行を更新しようとすると、 CASE ステートメントを使用すると、クエリは CPU を過剰に消費し、指定されていない行を含むすべての行を更新します。更新を意図した行に制限するにはどうすればよいですか?
A: この問題は、CASE ステートメントに ELSE 句が含まれていない場合に発生します。デフォルトでは、CASE ステートメントで明示的に指定されていない行には NULL 値が割り当てられます。これにより、テーブル全体で不必要な更新が行われます。
これを解決するには、CASE ステートメントに ELSE 句を追加し、uid 列の既存の値を割り当てます。これにより、更新が 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 MyISAM UPDATE が CASE WHEN で失敗するのはなぜですか? どうすれば修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。