sql >> Databasteknik >  >> RDS >> Mysql

mysql case i uppdateringsförklaring med REPLACE

Eftersom du använder LIKE '%abc%' , kommer uppdateringssatsen att kräva en fullständig tabellskanning. I så fall kommer en kombination av de två påståendena att förbättra den övergripande prestandan. Men i ditt förslag uppdateras varje enskild rad och de flesta av dem uppdateras utan att ändras (värdet kolumn1 ersätts med kolumn1-värdet).

Du vill vara säker på att du behåller WHERE klausul så att endast rader som verkligen behöver ändras ändras. Denna onödiga skrivning till disk är långsammare än att kontrollera om raden matchar kriterierna.

Gör så här:

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%';



  1. Hur tar man rekursivt bort objekt från tabellen?

  2. Hur hämtar jag var N:te post från en tabell?

  3. hur hämtar man mysql-data i vb.net?

  4. Hur testar man MySQL-transaktioner?