sql >> Base de Datos >  >> RDS >> Mysql

optimización de consultas con declaración de caso

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.