我目前有这样的事情:
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;
这是正确的做法吗?我不熟悉/何时。谢谢!
答案 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%';