2017-08-08 64 views
-2

我试图优化查询以尽可能优化执行,我发现某些代码是别人编写的并且已经与他们讨论过,他们似乎认为以下是表现最好的:在ISNULL中包含CASE语句时的SQL性能

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

不过,我说,这可以通过以下方式进行明确,并可能更有效:

CASE WHEN A = 1 THEN 1 ELSE 0 END 

我在网上找了一个类似的案件,但似乎无法找到一个明确的答案,所以我正在寻找一个人更多有关基于性能的T-SQL设计的经验,让我更好地了解哪个(如果有的话)执行速度更快。

+5

* * *变体实际上是应用程序性能瓶颈的几率可以忽略不计。不要把注意力集中在错误的地方。如果你有特定的目标,并且与这些目标相比你有一个*可衡量的*绩效赤字,那么计算出*真实*热点的位置并将注意力集中在那里。 –

+1

我同意@Damien_The_Unbeliever,并补充一点,请记住,ISNULL将评估数据_before_存在的任何数据类型的评估发生。如果删除了ISNULL,必要时将尝试隐式数据类型,这可能会导致性能问题。尽管如此,这是无关紧要的。 – Phoenix

+0

您可以检查查询计划,以查看查询引擎是否实际上存在差异 - 看起来像是一个非常小的微型优化,尽管它根本就没有。 – Andrew

回答

1

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

如果您遇到性能问题,也许让自己的自由的布伦特奥扎尔的工具副本:https://www.brentozar.com/askbrent/

在这些工具中,你会得到sp_BlitzFirst它可以帮助你找到bonafide瓶颈,拿起一个了解未来会导致什么麻烦。

优化时,我发现设定目标是最困难的部分,尽管一旦完成,您的工作或多或少都会被裁减掉。
你写

我试图优化查询执行尽可能

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