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

时间:2011-07-15 13:18:49

标签: sql performance sql-server-2008 stored-procedures user-defined-functions

我有一个非常复杂的表值函数,可以在各种表上进行内连接。我要调整这个功能。 SQL不会显示在函数内执行的实际执行计划。所以我想将其转换为存储过程并查看查询计划。当我在单个批处理中运行原始函数以及这个新的存储过程时,存储过程消耗了100%的时间。

这是预期的吗?我正在使用SQL Server 2008。

1 个答案:

答案 0 :(得分:2)

是的,这是预料之中的。多语句表值函数(TVF)是一个黑盒子,内部处理不可见。

它没有运行(这可能是出于其他原因,但这不是问题)。优化器无法正确判断TVF与程序,因此将100%的批次分配给proc。

一种方法是运行代码(separatley)并使用SQL事件探查器来记录持续时间,读取,CPU。