case
statement tilføjer tid, fordi der søges efter det.
Løsningen? Opbevar parrene i et midlertidigt bord. . . med et indeks. Så:
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'),
. . . ;
Brug derefter update
med join
:
update test_table tt join
code_paris cp
on tt.code = cp.old_code
set tt.code = cp.new_code;
Dette sparer dig tid, fordi den matchende kode findes ved hjælp af indekset, i stedet for at søge én efter én gennem en case
udmelding. Derudover forsøges der ingen opdatering på rækker, der ikke matcher. De 170.000 rækker uden match er sandsynligvis den langsomste del af forespørgslen, fordi de skal gennemgå hele listen over case
værdier.