表值函数在哪里我的查询计划去吗?(Table Valued Function where did m

2019-07-18 04:56发布

我刚刚完成一个复杂的SQL语句的表值函数上的SQLServer 2000年当在查询计划寻找一个SELECT * FROM dbo.NewFunc它只是给我我所创建的表的表扫描。

我猜,这是因为在tempdb中创建表,我只是从中进行选择。

因此查询很简单:

SELECT * FROM table in tempdb

我的问题是:

是UDF使用相同的计划,复杂的SQL语句?

如何为这个UDF我可以调指标?

我能看到真正的计划是什么?

Answer 1:

多语句表值函数(TVF)是黑箱到优化器的外部查询。 你只能看到IO,从探查CPU等。

该TVF必须运行到完成并返回所有行任何处理发生之前。 这意味着where子句不会例如被优化。

因此,如果这TVF返回百万行,它首先排序。

SELECT TOP 1 x FROM db.MyTVF ORDER BY x DESC

单语句/直列TVFs不会受到影响,因为它们是扩展宏,并进行评估。 上面的例子将评价指标等。

而且,这里太: 请问查询计划优化器与加盟/过滤表值函数行之有效? 与JOIN VS在Microsoft SQL Server 2008中APPLY的相对效率

要准确地回答:没有,没有,没有

我有很少的多语句TVFs:在我做的,我有很多的参数的UDF内进行过滤。



文章来源: Table Valued Function where did my query plan go?