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
की पूरी सूची से गुजरना पड़ता है मान।