Mysql
 sql >> Base de données >  >> RDS >> Mysql

optimisation des requêtes avec l'instruction case

Le case l'instruction ajoute du temps, car elle est recherchée.

La solution? Stockez les paires dans une table temporaire. . . avec un indice. Donc :

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'),
           . . . ;

Ensuite, utilisez update avec join :

update test_table tt join
       code_paris cp
       on tt.code = cp.old_code
    set tt.code = cp.new_code;

Cela vous fait gagner du temps car le code correspondant est trouvé à l'aide de l'index, plutôt que de rechercher un par un dans un case déclaration. De plus, aucune mise à jour n'est tentée sur les lignes qui n'ont pas de correspondance. Les 170 000 lignes sans correspondance sont probablement la partie la plus lente de la requête, car elles doivent parcourir toute la liste de case valeurs.