gpt4 book ai didi

sql - 表值函数 我的查询计划去哪儿了?

转载 作者:行者123 更新时间:2023-12-03 02:25:19 27 4
gpt4 key购买 nike

我刚刚在 SQLServer 2000 上的表值函数中封装了一条复杂的 SQL 语句。当查看 SELECT * FROM dbo.NewFunc 的查询计划时,它只是对我创建的表进行表扫描。

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

所以查询很简单:

SELECT * FROM table in tempdb

我的问题是:

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

如何调整此 UDF 的索引?

我能看到真正的计划吗?

最佳答案

多语句表值函数 (TVF) 对于外部查询的优化器来说是黑匣子。您只能从分析器中看到 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 中进行过滤。

关于sql - 表值函数 我的查询计划去哪儿了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1432343/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com