Da du bruger LIKE '%abc%'
, vil opdateringserklæringen kræve en fuld tabelscanning. I så fald vil en kombination af de to udsagn forbedre den samlede ydeevne. I dit forslag bliver hver enkelt række dog opdateret, og de fleste af dem opdateres uden at blive ændret (værdien for kolonne 1 er erstattet med værdi for kolonne 1).
Du vil sikre dig, at du beholder WHERE
klausul, så kun rækker, der virkelig skal ændres, ændres. Denne unødvendige skrivning til disk er langsommere end at kontrollere, om rækken matcher kriterierne.
Gør dette:
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%';