Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL案例与乘法_Sql_Sql Server - Fatal编程技术网

SQL案例与乘法

SQL案例与乘法,sql,sql-server,Sql,Sql Server,我有这样一个问题: SELECT CASE WHEN IsAdd = 1 THEN Base + Extra ELSE Base END FROM MyTable 使用乘法消除CASE语句会有更好的性能吗 SELECT Base + Extra * ISNULL(IsAdd, 0) FROM MyTable 您不必担心这种优化 SQL查询的开销通常是读取数据、提取记录和返回结果。简单的操作,如乘法或比较是次要的。某些操作可能会变得昂贵(例如使用用户定义

我有这样一个问题:

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()
,因为它是标准的。

过早/微观优化。极客们喜欢它。我喜欢它。这是浪费你的时间。只有在你证明了这些细节是一个问题并且值得你花费时间之后,才能专注于大局,深入研究这些细节。实际上需要优化的问题总是不是你想象中的问题。