Aktualisieren von MySQL-MyISAM-Tabellen mit CASE WHEN/THEN/ELSE
F: Beim Versuch, bestimmte Zeilen in einer großen MyISAM-Tabelle mit a zu aktualisieren Bei Verwendung der CASE-Anweisung verbraucht die Abfrage übermäßig viel CPU und aktualisiert alle Zeilen, einschließlich der nicht angegebenen. Was kann getan werden, um die Aktualisierung auf die vorgesehenen Zeilen zu beschränken?
A: Das Problem tritt auf, wenn die CASE-Anweisung keine ELSE-Klausel enthält. Standardmäßig werden Zeilen, die in der CASE-Anweisung nicht explizit erwähnt werden, NULL-Werte zugewiesen. Dies führt zu unnötigen Aktualisierungen in der gesamten Tabelle.
Um dieses Problem zu beheben, hängen Sie eine ELSE-Klausel an die CASE-Anweisung an und weisen Sie ihr den vorhandenen Wert der UID-Spalte zu. Dadurch wird verhindert, dass sich die Aktualisierung auf Zeilen auswirkt, die nicht in den WHEN-Klauseln angegeben sind.
Fügen Sie außerdem eine WHERE-Klausel ein, um explizit die Zeilen anzugeben, die aktualisiert werden sollen. Dadurch wird sichergestellt, dass nur die gewünschten Zeilen als Ziel ausgewählt werden.
Beispiel:
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 schlägt mein MySQL MyISAM-Update mit CASE WHEN fehl und wie kann ich es beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!