我有一列代码。现在每个代码都已更改为其他代码。我正在尝试更新它。所以我在 mysql 中使用了 case
语句。但问题是,我有大约 250,000 行和 80,000 个唯一代码需要替换。并且 case 语句执行大约需要 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
最佳答案
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
值列表。
关于mysql - 使用 case 语句优化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39501092/