El case
declaración agrega tiempo, porque se busca.
¿La solución? Guarde los pares en una tabla temporal. . . con un índice. Entonces:
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'),
. . . ;
Luego usa update
con join
:
update test_table tt join
code_paris cp
on tt.code = cp.old_code
set tt.code = cp.new_code;
Esto le ahorra tiempo porque el código coincidente se encuentra usando el índice, en lugar de buscar uno por uno a través de un case
declaración. Además, no se intenta actualizar las filas que no tienen coincidencias. Las 170 000 filas sin coincidencias son probablemente la parte más lenta de la consulta, porque necesitan pasar por la lista completa de case
valores.