当前位置: 首页 > 面试题库 >

表值函数查询计划去了哪里?

艾飞宇
2023-03-14
问题内容

我刚刚在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不会受到影响,因为它们像宏一样展开并进行了评估。上面的示例将评估索引等。

同样在这里:查询计划优化器是否可以与联接/过滤的表值函数一起很好地工作?SQL Server
2008中JOIN与APPLY的比较和相对效率

确切回答:不,不,不

我只有很少的多语句TVF:在哪里,我有很多参数可以在UDF中进行过滤。



 类似资料:
  • 问题内容: 我对String Buffer玩了一点,并注意到混合使用char和String是一个坏主意。我希望我的以下代码可以打印“ Main”,但是只有一个“ ain”。 显然word是用字符串缓冲区构造函数的char版本初始化的,但是我测试了诸如toString或getIndex()之类的几种方法,但找不到“ ain”旁边的任何东西-这让我感到奇怪:构造函数做了什么?有用途吗?可以通过某种方式

  • 问题内容: 在batik的文档中,它显示了如何从类org.apache.batik.dom.svg.SVGDOMImplementation中获取DOM实现的实例。 但是,从同一站点下载Batik 1.8之后,我在任何地方都找不到此类。 我下载了1.7版本,并在batik-svg-dom.jar中找到了它,但它在1.8内的同一jar中不存在(或据我所知在该软件包中的任何jar中都不存在)。 此类已

  • 问题内容: 我正在运行Mac OSX Snow Leopard。 我一直使用Mac OSX的常规软件更新功能来更新Java。 我过去使用Java 工具取得了巨大的成功。 今天早上,我像往常一样键入命令行。我收到以下错误: 所有的其他Java工具(,,等)的工作就好了。 确实不包含(突然)。 产量: WTF? 问题答案: 似乎是链接的混合;/ usr / bin / jvisualvm符号链接指向不

  • 描述 贷款发放后,平台方按照合同号和合同号查询从当前日期后的还款计划(单次最多50条) API代码 loan_app:repayment_plan:query 请求参数 名称 类型 是否必须 描述 示例值 contractNo String 是 合同编号 acctNo String 是 贷款账号 响应参数 名称 类型 描述 示例值 termNo Number 期数 dtRepay Date 还款日

  • 本文向大家介绍MySQL的查询计划中ken_len的值计算方法,包括了MySQL的查询计划中ken_len的值计算方法的使用技巧和注意事项,需要的朋友参考一下 key_len的含义 在MySQL中,可以通过explain查看SQL语句所走的路径,如下所示: 其中,key_len表示使用的索引长度,是以字节为单位。在上面的例子中,由于int型占用4个字节,而索引中只包含了1列,所以,key_len是

  • 问题内容: 我有一个具有以下架构的postgres表 现在,当我运行表单查询时: 我正在制定以下计划: 现在,我无法理解查询计划的执行方式。查询计划是否首先从myTable的索引Designation_place_name检索序列号,然后转到myTable并获取行,然后对timeOfJoining执行过滤 或者 查询计划是否同时获取索引timeOfJoining_timeOfLeaving和Des