Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql case in update-Anweisung mit REPLACE

Da Sie LIKE '%abc%' verwenden , erfordert die Update-Anweisung einen vollständigen Tabellenscan. In diesem Fall verbessert die Kombination der beiden Anweisungen die Gesamtleistung. In Ihrem Vorschlag wird jedoch jede einzelne Zeile aktualisiert und die meisten von ihnen werden aktualisiert, ohne geändert zu werden (der Wert von Spalte1 wird durch den Wert von Spalte1 ersetzt).

Sie möchten sicherstellen, dass Sie das WHERE beibehalten -Klausel, sodass nur Zeilen geändert werden, die wirklich geändert werden müssen. Dieses unnötige Schreiben auf die Festplatte ist langsamer als zu prüfen, ob die Zeile den Kriterien entspricht.

Tun Sie dies:

UPDATE table1
SET column1 = 
CASE
WHEN column1 LIKE '%abc%' THEN REPLACE(column1, 'abc', 'abc1')
WHEN column1 LIKE '%def%' THEN REPLACE(column1, 'def', 'def1')
END
WHERE column1 LIKE '%abc%' OR column1 LIKE '%def%';