【发布时间】:2021-11-13 21:28:33
【问题描述】:
我有一个 SQL 函数,如果我按照以下代码执行该函数,它会在 11 秒内返回结果。
SELECT *
FROM MyFunction('param1', 'param2', 'param3', 'param4', 'param5')
但是如果我按照以下方式执行函数,它会在 40 秒内返回结果。
DECLARE
@PARAM1 NVARCHAR(4),
@PARAM2 NVARCHAR(3),
@PARAM3 NVARCHAR(3),
@PARAM4 NVARCHAR(10),
@PARAM5 NVARCHAR(10)
SET @PARAM1 = 'param1'
SET @PARAM2 = 'param2'
SET @PARAM3 = 'param3'
SET @PARAM4 = 'param4'
SET @PARAM5 = 'param5'
SELECT *
FROM MyFunction(@PARAM1, @PARAM2, @PARAM3, @PARAM4, @PARAM5)
相同的参数值和相同的结果返回,但为什么使用变量需要这么长时间?
【问题讨论】:
-
递归,还有更多递归要做吗?由于没有
FUNCTION的定义,我们只能猜测。 -
请edit问题并添加函数定义,以及任何相关的表和索引定义。另请通过brentozar.com/pastetheplan 分享查询计划的链接
-
@DaleK 它很容易成为动态切片取出
case表达式的整个部分或整个连接的结果,这只能用文字来完成
标签: sql sql-server tsql sql-server-2016