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

caseステートメントによるクエリの最適化

    case ステートメントは検索されるため、時間が追加されます。

    ソリューション?ペアを一時テーブルに保存します。 。 。インデックス付き。だから:

    create temporary table code_pairs (
        old_code varchar(255) not null primary key,
        new_code varchar(255)
    );
    
    insert into code_pairs(old_code, new_code)
        values ('akdsfj', 'kadjsf'),
               ('asdf', 'ndgs'),
               . . . ;
    

    次に、updateを使用します joinで :

    update test_table tt join
           code_paris cp
           on tt.code = cp.old_code
        set tt.code = cp.new_code;
    

    これにより、caseを1つずつ検索するのではなく、インデックスを使用して一致するコードが見つかるため、時間を節約できます。 声明。さらに、一致する行がない行の更新は試行されません。一致しない170,000行は、caseのリスト全体を調べる必要があるため、おそらくクエリの中で最も遅い部分です。 値。




    1. 私のお気に入りのPostgreSQLクエリの詳細-そしてなぜそれらも重要なのか

    2. postgreSQLの左側にゼロを埋める

    3. SQL / XMLでのXPath1、カウント要素は空を返します

    4. postgresqlのビットマップインデックスを理解する