sql – 表值函数我的查询计划在哪里去了?
发布时间:2020-12-12 16:27:24 所属栏目:MsSql教程 来源:网络整理
导读:我刚刚在SQLServer 2000上的表值函数中包装了一个复杂的SQL语句. 在查看SELECT * FROM dbo.NewFunc的查询计划时,它只是给我一个我创建的表的表扫描. 我猜这是因为table是在tempdb中创建的,我只是从中选择. 所以查询很简单: SELECT * FROM table in tempdb 我
我刚刚在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中进行过滤. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |