Mysql
 sql >> Baza danych >  >> RDS >> Mysql

optymalizacja zapytań za pomocą instrukcji case

case oświadczenie dodaje czas, ponieważ jest przeszukiwane.

Rozwiązanie? Przechowuj pary w tabeli tymczasowej. . . z indeksem. A więc:

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

Następnie użyj update z join :

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

Oszczędza to czas, ponieważ pasujący kod znajduje się przy użyciu indeksu, zamiast przeszukiwać pojedynczo case oświadczenie. Ponadto nie są podejmowane żadne próby aktualizacji w wierszach, które nie mają dopasowania. 170 000 wierszy bez dopasowania to prawdopodobnie najwolniejsza część zapytania, ponieważ muszą przejść przez całą listę case wartości.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysqli_query() oczekuje co najmniej 2 parametrów, 1 podany w?

  2. PHP wiele poleceń MYSQL w jednym zapytaniu mysql_query()

  3. uniemożliwić MYSQL resetowanie wartości automatycznego przyrostu po ponownym uruchomieniu serwera

  4. PHP nie widzi rozszerzenia mysql

  5. Wiersz wyjściowy z wartością null tylko wtedy, gdy nie ma tego samego wiersza z wartością inną niż null