我也需要这个。我有两个函数可以将案例计数带回存储过程,该存储过程正在提取所有用户的列表及其案例计数。
顺理成章
select name, userID, fnCaseCount(userID), fnRefCount(UserID)
from table1 t1
left join table2 t2
on t1.userID = t2.UserID
对于一个相对较小的集合(400 个用户),它会调用这两个函数中的每一个。总共有 800 个来自存储过程的调用。不漂亮,但人们不会期望 sql server 有这么几个调用的问题。
这需要 4 多分钟才能完成。
就个人而言,函数调用几乎是瞬间完成的。即使是 800 个近乎瞬时的调用也应该是近乎瞬时的。
所有索引都已就位,当针对存储过程和函数分析执行计划时,SSMS 建议没有新索引。
我从函数中复制代码,并将其放入存储过程中的 SQL 查询中。但似乎 sp 和 function 之间的转换占用了时间。
18 秒的执行时间仍然太长,但允许查询在我们的 30 秒超时窗口内完成。
如果我可以有一个子过程,它会使代码更漂亮,但仍然可能增加开销。
接下来我可能会尝试将相同的功能移动到我可以在连接中使用的视图中。
select t1.UserID, t2.name, v1.CaseCount, v2.RefCount
from table1 t1
left join table2 t2
on t1.userID = t2.UserID
left join vwCaseCount v1
on v1.UserID = t1.UserID
left join vwRefCount v2
on v2.UserID = t1.UserID
好的,我刚刚从函数中创建了视图,所以我的执行时间从 4 多分钟到 18 秒再到 8 秒。我会一直玩下去的。