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.