MySQL-Update mit CASE WHEN/THEN/ELSE
Problem:
Beim Versuch Wenn Sie eine große MyISAM-Tabelle mit einer CASE WHEN/THEN/ELSE-Anweisung aktualisieren, beansprucht die Abfrage die CPU und beansprucht übermäßig viel Zeit zum Abschluss. Darüber hinaus werden alle Zeilen in der Tabelle aktualisiert, auch diejenigen, die nicht in der Abfrage angegeben sind.
Erklärung:
Der Grund für dieses Verhalten ist, dass MySQL die CASE-Anweisung interpretiert als Aktualisierung aller Zeilen in der Tabelle. Zeilen, die keiner der WHEN-Bedingungen entsprechen, wird ein NULL-Wert zugewiesen.
Lösung:
Um dieses Problem zu vermeiden, sollte die Abfrage so geändert werden, dass sie ein ELSE enthält Anweisung, die den vorhandenen Wert Zeilen zuweist, die keiner der WHEN-Bedingungen entsprechen. Darüber hinaus kann eine WHERE-Klausel verwendet werden, um die Aktualisierung nur auf die angegebenen Zeilen zu beschränken.
Die korrigierte Abfrage:
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);
Das obige ist der detaillierte Inhalt vonWarum ist mein MySQL CASE WHEN-Update langsam und betrifft alle Zeilen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!