表值函数转换为存储过程时运行缓慢
我有一个非常复杂的表值函数,可以对各种表进行内部联接。我必须调整这个功能。 SQL 不会显示函数内执行的实际执行计划。所以我想将其转换为存储过程并查看查询计划。当我在单批中运行原始函数以及这个新的存储过程时,100% 的时间都被存储过程消耗了。
这是预期的吗?我正在使用 SQL Server 2008。
I've a pretty complex table valued function doing inner joins over various tables. I've to tune this function. SQL wan't showing actual execution plan executed inside the function. So I thought to convert this to stored procedure and see the query plan. When I ran the original function as well as this new stored procedure in single batch, 100% time was consumed by stored procedure.
Is this expected? I'm using SQL Server 2008.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是的,这是预期的。多语句表值函数 (TVF) 是一个黑匣子,内部处理不可见。
它的运行速度并不慢(也可能是由于其他原因,但这不是问题所在)。优化器无法正确判断 TVF 与过程,因此将 100% 的批次分配给过程。
一种方法是运行代码(单独)并使用 SQL Profiler 记录持续时间、读取次数、CPU。
Yes, this is expected. A multi-statement table valued function (TVF) is a black box and the internal processing isn't visible.
It isn't running slow (well it could be for other reasons, but this isn't the question). The optimiser can not judge the TVF vs the procedure correctly and so allocates 100% of the batch to the proc.
One way is to run the code (separatley) and use SQL Profiler to note Duration, Reads, CPU.