Le case
l'instruction ajoute du temps, car elle est recherchée.
La solution? Stockez les paires dans une table temporaire. . . avec un indice. Donc :
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'),
. . . ;
Ensuite, utilisez update
avec join
:
update test_table tt join
code_paris cp
on tt.code = cp.old_code
set tt.code = cp.new_code;
Cela vous fait gagner du temps car le code correspondant est trouvé à l'aide de l'index, plutôt que de rechercher un par un dans un case
déclaration. De plus, aucune mise à jour n'est tentée sur les lignes qui n'ont pas de correspondance. Les 170 000 lignes sans correspondance sont probablement la partie la plus lente de la requête, car elles doivent parcourir toute la liste de case
valeurs.