Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

otimização de consulta com instrução case


O case instrução adiciona tempo, porque é pesquisado.

A solução? Armazene os pares em uma tabela temporária. . . com um índice. Então:
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'),
           . . . ;

Em seguida, use update com join :
update test_table tt join
       code_paris cp
       on tt.code = cp.old_code
    set tt.code = cp.new_code;

Isso economiza seu tempo porque o código correspondente é encontrado usando o índice, em vez de pesquisar um por um por meio de um case declaração. Além disso, nenhuma atualização é tentada em linhas que não têm correspondência. As 170.000 linhas sem correspondência são provavelmente a parte mais lenta da consulta, porque precisam percorrer toda a lista de case valores.