Abh*_*aja 4 mysql sql database
我有一个包含代码的列.现在每个代码都已更改为其他内容.我正在尝试更新它.所以我case在mysql中使用了语句.但问题是,我有大约250,000行和80,000个需要替换的唯一代码.案件陈述需要10分钟才能执行.任何更好的方法来做到这一点.
我的查询如下所示:
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
Run Code Online (Sandbox Code Playgroud)
该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'),
. . . ;
Run Code Online (Sandbox Code Playgroud)
然后使用update具有join:
update test_table tt join
code_paris cp
on tt.code = cp.old_code
set tt.code = cp.new_code;
Run Code Online (Sandbox Code Playgroud)
这节省了时间,因为使用索引找到匹配的代码,而不是通过case语句逐个搜索.此外,不会对没有匹配的行进行更新.没有匹配的170,000行可能是查询中最慢的部分,因为它们需要遍历整个case值列表.