首页 > 解决方案 > 在存在 where 子句的情况下在更新中使用 case 语句会降低效率吗?

问题描述

查询 1

update foo set 
  status = 1, 
  bar = 1 
where status = 0 and item_id in ("itemId1", "itemId2");

查询 2

update foo set 
  status = 1, 
  bar = case item_id 
    when "itemId1" then 4 
    when "itemId2" then 5 
  end 
where status = 0 and item_id in ("itemId1", "itemId2");

从逻辑上讲,这两个查询正在做不同的事情。但是我正在添加一个需要一些条件更新逻辑的新功能,并且正在评估是否会有任何性能回归。

以上两个查询在性能方面是否等效?请注意,该CASE语句将始终是在子句中过滤的 item_ids 的子集WHERE。所以 MySQL 不应该加载任何“额外”数据,对吗?

我唯一能想到的是查询字符串的原始大小会更大。

标签: mysqldatabaseinnodb

解决方案


它的效率有点低,因为它必须与item_id每个字符串进行比较以确定要分配给的值bar

但是处理子句的效率WHERE应该是一样的。


推荐阅读