Der case
Anweisung fügt Zeit hinzu, weil sie durchsucht wird.
Die Lösung? Speichern Sie die Paare in einer temporären Tabelle. . . mit Index. Also:
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'),
. . . ;
Verwenden Sie dann update
mit join
:
update test_table tt join
code_paris cp
on tt.code = cp.old_code
set tt.code = cp.new_code;
Dadurch sparen Sie Zeit, da der passende Code über den Index gefunden wird, anstatt einen case
einzeln zu durchsuchen Aussage. Außerdem wird für Zeilen, die keine Übereinstimmung aufweisen, keine Aktualisierung versucht. Die 170.000 Zeilen ohne Übereinstimmung sind wahrscheinlich der langsamste Teil der Abfrage, da sie die gesamte Liste von case
durchlaufen müssen Werte.