我有一列代码。现在,每个代码都已更改为其他代码。我正在尝试更新它。所以我已经case在mysql中使用了声明。但是问题是,我大约有250,000行和80,000个唯一代码需要替换。而case语句大约要花10分钟才能执行。任何更好的方法可以做到这一点。
case
我的查询如下所示:
UPDATE test_table SET code = CASE WHEN code = "akdsfj" THEN "kadjsf" WHEN code = "asdf" THEN "ndgs" WHEN code = "hfgsd" THEN "gfdsd" ... (I am doing in batches of 1000 case statements at a time) ELSE code
该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
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值列表。