使用case语句进行查询优化

时间:2016-09-14 23:27:10

标签: mysql sql database

我有一个包含代码的列。现在每个代码都已更改为其他内容。我正在尝试更新它。所以我在mysql中使用了case语句。但问题是,我有大约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

1 个答案:

答案 0 :(得分:9)

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'),
           . . . ;

然后将updatejoin

一起使用
update test_table tt join
       code_paris cp
       on tt.code = cp.old_code
    set tt.code = cp.new_code;

这节省了时间,因为使用索引找到匹配的代码,而不是通过case语句逐个搜索。此外,不会对没有匹配的行进行更新。没有匹配的170,000行可能是查询中最慢的部分,因为它们需要遍历整个case值列表。