case
изразът добавя време, защото се търси.
Решението? Съхранявайте двойките във временна таблица. . . с индекс. И така:
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'),
. . . ;
След това използвайте update
с join
:
update test_table tt join
code_paris cp
on tt.code = cp.old_code
set tt.code = cp.new_code;
Това ви спестява време, тъй като съответстващият код се намира с помощта на индекса, а не чрез търсене един по един чрез case
изявление. Освен това не се прави опит за актуализиране на редове, които нямат съвпадение. 170 000 реда без съвпадение вероятно са най-бавната част от заявката, защото трябва да преминат през целия списък с case
стойности.