我有一个非常复杂的表值函数,可以在各种表上进行内连接。我要调整这个功能。 SQL不会显示在函数内执行的实际执行计划。所以我想将其转换为存储过程并查看查询计划。当我在单个批处理中运行原始函数以及这个新的存储过程时,存储过程消耗了100%的时间。
这是预期的吗?我正在使用SQL Server 2008。
答案 0 :(得分:2)
是的,这是预料之中的。多语句表值函数(TVF)是一个黑盒子,内部处理不可见。
它没有运行慢(这可能是出于其他原因,但这不是问题)。优化器无法正确判断TVF与程序,因此将100%的批次分配给proc。
一种方法是运行代码(separatley)并使用SQL事件探查器来记录持续时间,读取,CPU。