代码之家  ›  专栏  ›  技术社区  ›  Dima

update语句中的mysql case with REPLACE

  •  3
  • Dima  · 技术社区  · 13 年前

    我现在有这样的东西:

    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 回复  |  直到 13 年前
        1
  •  4
  •   OmerGertel    13 年前

    因为你在使用 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%';