在ISNULL

时间:2017-08-08 13:14:20

标签: sql-server performance tsql

我正在尝试优化查询以尽可能优化,我找到了其他人编写过的代码,并与他们讨论过,他们似乎认为以下内容效果最佳:

ISNULL(CASE WHEN A = 1 THEN 1 END, 0)

但是,我说这可以通过以下方式更清晰,更有效:

CASE WHEN A = 1 THEN 1 ELSE 0 END

我已经在网上寻找类似的案例,但似乎无法找到明确的答案,所以我正在寻找对基于性能的T-SQL设计有更多经验的人来权衡并让我更好地了解哪个如果有的话,会表现得更快。

1 个答案:

答案 0 :(得分:1)

可能有更好的地方集中注意力。为了它的乐趣,我尝试了你提出的这个特殊问题,并且查询计划是相同的。

如果您遇到性能问题,也许可以获得Brent Ozar工具的免费副本:https://www.brentozar.com/askbrent/

在这些工具中,您将获得sp_BlitzFirst,它可以帮助您找到真正的瓶颈,并了解将来会导致什么问题。

在优化时,我发现设定目标是最困难的部分,但是一旦得到照顾,您的工作或多或少都会被裁掉。
你写了

  

我尝试优化查询以尽可能优化

您需要定义性能目标是什么。如果您的查询运行时间太长,则需要确定可接受的速度,然后朝着该目标努力。如果你不这样做,你将花费太多时间在一个查询上。