case
oświadczenie dodaje czas, ponieważ jest przeszukiwane.
Rozwiązanie? Przechowuj pary w tabeli tymczasowej. . . z indeksem. A więc:
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'),
. . . ;
Następnie użyj update
z join
:
update test_table tt join
code_paris cp
on tt.code = cp.old_code
set tt.code = cp.new_code;
Oszczędza to czas, ponieważ pasujący kod znajduje się przy użyciu indeksu, zamiast przeszukiwać pojedynczo case
oświadczenie. Ponadto nie są podejmowane żadne próby aktualizacji w wierszach, które nie mają dopasowania. 170 000 wierszy bez dopasowania to prawdopodobnie najwolniejsza część zapytania, ponieważ muszą przejść przez całą listę case
wartości.