case
příkaz přidává čas, protože je prohledáván.
Řešení? Uložte páry do dočasné tabulky. . . s indexem. Takže:
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'),
. . . ;
Poté použijte update
pomocí join
:
update test_table tt join
code_paris cp
on tt.code = cp.old_code
set tt.code = cp.new_code;
To vám ušetří čas, protože odpovídající kód se najde pomocí indexu, místo aby se prohledával jeden po druhém přes case
tvrzení. Kromě toho se nepokouší o aktualizaci řádků, které nemají žádnou shodu. 170 000 řádků bez shody je pravděpodobně nejpomalejší částí dotazu, protože potřebují projít celý seznam case
hodnoty.