case
uttalandet lägger till tid eftersom det söks.
Lösningen? Förvara paren i ett tillfälligt bord. . . med ett index. 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'),
. . . ;
Använd sedan update
med join
:
update test_table tt join
code_paris cp
on tt.code = cp.old_code
set tt.code = cp.new_code;
Detta sparar tid eftersom den matchande koden hittas med hjälp av indexet, istället för att söka en efter en genom ett case
påstående. Dessutom görs ingen uppdatering på rader som inte har någon matchning. De 170 000 raderna utan matchning är förmodligen den långsammaste delen av frågan, eftersom de måste gå igenom hela listan med case
värden.