sql - SQL CASE 与乘法
问题描述
我有一个这样的查询:
SELECT
CASE WHEN IsAdd = 1
THEN
Base + Extra
ELSE
Base
END
FROM MyTable
使用乘法消除 CASE 语句会有更好的性能吗?
SELECT
Base + Extra * ISNULL(IsAdd, 0)
FROM MyTable
解决方案
您无需担心此类优化。
SQL 查询的开销通常是读取数据、提取记录和返回结果。诸如乘法或比较之类的简单操作是次要的。某些操作可能会变得昂贵(例如使用用户定义的函数、长字符串等)。但乘法通常不会是其中之一。
因此,请专注于最能代表您想要完成的工作的内容。您的两个查询不表达完全相同的逻辑。如果只取、 和IsAdd
的值,0
它们可能恰好是相同的。但是您应该使用最能表达您意图的版本。1
NULL
顺便说一句,我更喜欢COALESCE()
,ISNULL()
因为它是标准的。
推荐阅读
- elasticsearch - Elasticsearch - 从 OLD_INDEX 到 NEW_INDEX 的点别名
- python - Python 中的 format() 实际上是做什么的?
- scala - 重用在模式/匹配/替换/拆分 Spark 函数上使用的字符串
- c - 来自指针的填充结构是否会使对该结构的访问在释放后未定义?
- java - 在一系列字符中第一次出现字符后从字符串中检索子字符串
- flutter - Flutter:创建一个滚动视图,在允许列表滚动之前收缩中心项目
- azure-data-explorer - 如果异步运行,是否保证 Kusto 查询摄取 (.set-or-append)
- javascript - 当 div 显示在上一个 HTML 页面上时,它如何在下一个 HTML 页面上保持显示显示?
- c# - c# wpf用颜色选择器改变字体颜色
- python - 使用 Pymunk 在 Box 上的权重