Dim*_*ima 4 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;
这是这样做的正确方法吗?我对案例/时间不熟悉。谢谢!
由于您使用的是LIKE '%abc%',更新语句将需要全表扫描。在这种情况下,结合这两个语句将提高整体性能。但是,在您的建议中,每一行都会更新,并且大多数行都会更新而不更改(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%';
| 归档时间: | 
 | 
| 查看次数: | 11496 次 | 
| 最近记录: |