Mysql
 sql >> база данни >  >> RDS >> Mysql

оптимизиране на заявки с оператор на case

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 стойности.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да преминете през масиви за вмъкване в базата данни

  2. Ограничете знаците в колоната на заявката на mysql

  3. Изчислете децил в MySQL въз основа на суми

  4. Как да създадете JSON обект в MySql с булева стойност?

  5. MySQL ALTER TABLE увисва