微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql – 表值函数我的查询计划在哪里去了?

我刚刚在sqlServer 2000上的表值函数中包装了一个复杂的sql语句.
在查看SELECT * FROM dbo.NewFunc的查询计划时,它只是给我一个我创建的表的表扫描.

我猜这是因为table是在tempdb中创建的,我只是从中选择.

所以查询很简单:

SELECT * FROM table in tempdb

我的问题是:

UDF是否使用与复杂sql语句相同的计划?

如何调整此UDF的索引?

我能看到真正的计划吗?

解决方法

多语句表值函数(TVF)是外部查询的优化器的黑盒子.您只能从Profiler中查看IO,cpu等.

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

因此,如果此TVF返回一百万行,则首先进行排序.

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

单个语句/内联TVF不会受到影响,因为它们像宏一样被扩展并进行评估.上面的例子将评估索引等.

在这里Does query plan optimizer works well with joined/filtered table-valued functions?Relative Efficiency of JOIN vs APPLY in Microsoft SQL Server 2008

准确回答:不,不,不

我只有很少的多语句TVF:我这样做,我有多参数可以在UDF中进行过滤.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐