使用REPLACE的update语句中的mysql案例

时间:2010-11-18 15:41:02

标签: mysql replace case sql-update

我目前有这样的事情:

UPDATE table1  SET column1 = REPLACE(column1, 'abc', 'abc1') WHERE column1 LIKE '%abc%';
UPDATE table1  SET column1 = REPLACE(column1, 'def', 'def1') WHERE column1 LIKE '%def%';

我正在尝试将这些合并到一个更新语句中,并尝试以下操作:

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

这是正确的做法吗?我不熟悉/何时。谢谢!

1 个答案:

答案 0 :(得分:4)

由于您使用LIKE '%abc%',因此update语句将需要全表扫描。在这种情况下,将两个语句组合将提高整体绩效。但是,在您的建议中,每一行都会更新,并且大多数行都会更新而不会更改(column1值将替换为column1值)。

您希望确保保留WHERE子句,以便只更改真正需要更改的行。这种不必要的磁盘写入比检查行是否符合条件要慢。

这样做:

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