De case
statement voegt wel tijd toe, omdat het wordt doorzocht.
De oplossing? Bewaar de paren in een tijdelijke tabel. . . met een index. Dus:
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'),
. . . ;
Gebruik dan update
met join
:
update test_table tt join
code_paris cp
on tt.code = cp.old_code
set tt.code = cp.new_code;
Dit bespaart u tijd omdat de overeenkomende code wordt gevonden met behulp van de index, in plaats van één voor één te zoeken via een case
uitspraak. Bovendien wordt er geen update geprobeerd op rijen die geen overeenkomst hebben. De 170.000 rijen zonder overeenkomst zijn waarschijnlijk het langzaamste deel van de zoekopdracht, omdat ze de hele lijst met case
moeten doorlopen waarden.