表值函数转换为存储过程时运行缓慢

发布于 2024-11-23 20:12:23 字数 167 浏览 0 评论 0原文

我有一个非常复杂的表值函数,可以对各种表进行内部联接。我必须调整这个功能。 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

星光不落少年眉 2024-11-30 20:12:23

是的,这是预期的。多语句表值函数 (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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文