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'),
. . . ;
然后使用join with join:
update test_table tt join
code_paris cp
on tt.code = cp.old_code
set tt.code = cp.new_code;
这节省了时间,因为使用索引找到匹配的代码,而不是通过case语句逐个搜索.此外,不会对没有匹配的行进行更新.没有匹配的170,000行可能是查询中最慢的部分,因为它们需要遍历整个案例值列表.