sql >> Databáze >  >> RDS >> Mysql

optimalizace dotazu s příkazem case

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.




  1. Aktualizujte data do tabulky z dynamicky vytvořeného vstupního pole

  2. Jedinečné porušení omezení během vkládání:proč? (Věštec)

  3. MariaDB se nespouští:Plugin 'FEEDBACK' je zakázán.

  4. Oznámení obecné dostupnosti SQL Compliance Manager 5.9