mysql - 在存在 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 不应该加载任何“额外”数据,对吗?
我唯一能想到的是查询字符串的原始大小会更大。
解决方案
它的效率有点低,因为它必须与item_id
每个字符串进行比较以确定要分配给的值bar
。
但是处理子句的效率WHERE
应该是一样的。
推荐阅读
- java - 为什么这个多线程程序会陷入无限循环?
- c# - 如何将 SQL Server 中的图像放入 Visual Studio PictureBox
- html - 为什么 div 的固定位置会破坏它在 HTML 和 CSS 中的前景
- r - 在 R 中创建 3 维表时遇到问题
- r - 将 14 位日期时间对象转换为 POSIXct
- c# - C#:如何获取依赖于 ID 的数据库列值
- angular - 在 NativeScript Angular for iOS 中下载文件
- model-checking - 彼得森算法的这个模型不正确吗?
- c - 错误编译后C编程的错误消息中的“标签”是什么?
- python - Python父子特定类结构