首页 > 解决方案 > SQL CASE 与乘法

问题描述

我有一个这样的查询:

SELECT
  CASE WHEN IsAdd = 1
  THEN
    Base + Extra
  ELSE
    Base
  END
FROM MyTable

使用乘法消除 CASE 语句会有更好的性能吗?

SELECT
    Base + Extra * ISNULL(IsAdd, 0)
FROM MyTable

标签: sqlsql-server

解决方案


您无需担心此类优化。

SQL 查询的开销通常是读取数据、提取记录和返回结果。诸如乘法或比较之类的简单操作是次要的。某些操作可能会变得昂贵(例如使用用户定义的函数、长字符串等)。但乘法通常不会是其中之一。

因此,请专注于最能代表您想要完成的工作的内容。您的两个查询不表达完全相同的逻辑。如果只取、 和IsAdd的值,0它们可能恰好是相同的。但是您应该使用最能表达您意图的版本。1NULL

顺便说一句,我更喜欢COALESCE()ISNULL()因为它是标准的。


推荐阅读