![]() |
1
2
不,我会照原样留下。使用UDF(通常)可以 wierd side effects and limitations 而这个查询并不能证明使用它们是正当的。UDF性能不应该比您从这个直接查询中获得的性能更好。 以下是相关的日志: http://www.bennadel.com/blog/964-SQL-User-Defined-Functions-Are-Slower-Than-Inline-Logic.htm |
![]() |
2
1
UDF通常比查询中的case语句执行得最差。但是对于大多数SQL,最好同时尝试两者并比较结果。 |
![]() |
3
0
如果你进入一个单独的UDF,它可能不会有任何影响。为了提高性能,SQL Server优化了这些类型的操作,您的UDF可能无论如何都会“内联”。 |
![]() |
4
0
顺便说一句(抱歉,我记不起我在哪里读过这个),在使用case语句的“short”语法形式时,优化器有机会获得更好的执行计划。即使最终简短的形式只是语法上的糖分,它也给优化器一个提示,即所有的比较都是基于简单的等式,而不涉及复杂的表达式。 由于您使用了三个不同的列v1、v2和v3,因此无法切换给定的case语句。但是,如果您使用的是同一列,比如v1,那么这种修改有时会表现得更好:
好吧,也许这不太理想,因为处理空值时需要设置Continctions。我只是想指出在某些情况下可能进行的优化,因为您正在寻找一般的优化提示。 就其价值而言,我完全同意UDF的表现会更差。内联几乎可以普遍地提高性能,因为它避免了进行调用和从调用返回所需的所有工作(除非优化器为您秘密地内联它)。 在这种特定情况下的另一个想法是,您可以考虑使用一个带有派生表的联接,该派生表中包含文本值:
同样,这可能不是完美的,因为我选择了用like进行空处理的方式。然而,它充分展示了这一技术。 其他要点:
|
![]() |
Duvan · 将逗号(,)替换为点(.)[副本] 2 年前 |
![]() |
Mateen Bagheri · 选择表的计数并选择其自身 2 年前 |
![]() |
SoT · SQL Server中求和函数的工作方式 2 年前 |
![]() |
NKAT · 将列值聚合到列表中会产生错误 2 年前 |
![]() |
deanpillow · 返回两列中有一个匹配值的记录 2 年前 |
![]() |
snowflakes74 · 在Dapper中异步查询多个结果 2 年前 |