Il case
l'istruzione aggiunge tempo, perché viene cercata.
La soluzione? Memorizzare le coppie in una tabella temporanea. . . con un indice. Quindi:
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'),
. . . ;
Quindi usa update
con join
:
update test_table tt join
code_paris cp
on tt.code = cp.old_code
set tt.code = cp.new_code;
Questo ti fa risparmiare tempo perché il codice corrispondente viene trovato usando l'indice, invece di cercare uno per uno attraverso un case
dichiarazione. Inoltre, non viene tentato alcun aggiornamento sulle righe che non hanno corrispondenze. Le 170.000 righe senza corrispondenza sono probabilmente la parte più lenta della query, perché devono scorrere l'intero elenco di case
valori.