sql >> データベース >  >> RDS >> Mysql

REPLACEを使用したupdateステートメントのmysqlケース

    LIKE '%abc%'を使用しているため 、updateステートメントには全表スキャンが必要です。その場合、2つのステートメントを組み合わせると、全体的なパフォーマンスが向上します。ただし、提案では、すべての行が更新され、ほとんどの行は変更されずに更新されます(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%';
    



    1. すべてのタグに一致する複数のタグ(多対多の関係)のMysql結合クエリ?

    2. DateTimeをTimeにキャストする方法

    3. PostgreSQLとRedshiftでサブストリング関数を使用する方法

    4. より良い動的SQLのために避けるべき10のSP_EXECUTESQLの落とし穴