sql >> Database teknologi >  >> RDS >> Mysql

forespørgselsoptimering med case statement

case statement tilføjer tid, fordi der søges efter det.

Løsningen? Opbevar parrene i et midlertidigt bord. . . med et indeks. Så:

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

Brug derefter update med join :

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

Dette sparer dig tid, fordi den matchende kode findes ved hjælp af indekset, i stedet for at søge én efter én gennem en case udmelding. Derudover forsøges der ingen opdatering på rækker, der ikke matcher. De 170.000 rækker uden match er sandsynligvis den langsomste del af forespørgslen, fordi de skal gennemgå hele listen over case værdier.




  1. Skift udløbsdato for Oracle-brugeradgangskode

  2. Top 18 gratis og meget brugte, open source NoSQL-databaser

  3. Hvilken Postgres-værdi skal jeg bruge i Django's DATABASE_ENGINE?

  4. WordPress Custom Structure permalinks pauser efter migrering af websted til nyt domæne og server