Mysql
 sql >> Database >  >> RDS >> Mysql

mysql case nella dichiarazione di aggiornamento con REPLACE

Dato che stai usando LIKE '%abc%' , l'istruzione di aggiornamento richiederà un'analisi completa della tabella. In tal caso, la combinazione delle due affermazioni migliorerà le prestazioni complessive. Tuttavia, nel tuo suggerimento, ogni singola riga viene aggiornata e la maggior parte di esse viene aggiornata senza essere modificata (il valore della colonna1 viene sostituito con il valore della colonna1).

Vuoi assicurarti di mantenere il WHERE clausola in modo che vengano modificate solo le righe che necessitano realmente di modifiche. Questa scrittura non necessaria su disco è più lenta del controllo se la riga corrisponde ai criteri.

Fai questo:

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