首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SQL Server函数(如内联表值函数)是否仍然存在?

SQL Server函数(如内联表值函数)是否仍然存在?
EN

Stack Overflow用户
提问于 2015-07-24 05:38:33
回答 3查看 513关注 0票数 0

我知道派生表和公用表表达式(CTE)不会持久存在。它们一直存在于内存中,直到外部查询结束。每次调用都是一次重复的执行。

像内联表值函数这样的函数是否仍然存在,这意味着它们只计算一次?我们能索引一个内联表值函数吗?

EN

回答 3

Stack Overflow用户

发布于 2015-07-24 05:49:11

诸如内联表值函数之类的

Do函数仍然存在

不,如果你看到table valued function的语法,它本质上会返回select statement的结果,所以它不会将获取的数据存储在任何地方(与视图中相同)。因此,不存在创建索引的问题,因为数据不会被存储。

除非您将获取的数据存储在如下所示的另一个表中,然后可以在该测试表上创建索引/其他内容;

代码语言:javascript
代码运行次数:0
运行
复制
SELECT * FROM yourInlineTableValuedFunction(parameter)
INTO TestTable;
票数 0
EN

Stack Overflow用户

发布于 2015-07-24 05:51:33

内联函数基本上与视图或CTE相同,只是它有参数。如果查看查询计划,您将看到函数中的逻辑将包含在使用它的查询中--因此,您不能对其进行索引,SQL Server也不会这样缓存它的结果,但是这些页当然会放在缓冲池中以备将来使用。

我也不会说每次对CTE的调用都是重复执行,因为SQL server可以自由地决定如何运行查询,只要结果是正确的。

对于多语句UDF,每个调用(至少在2014年之前的版本中)都是单独的执行,据我所知,每次都是独立的执行,而不是我假设的你所指的意义上的缓存。

票数 0
EN

Stack Overflow用户

发布于 2015-07-24 05:58:08

我们能索引一个内联表值函数吗?

不能,但是如果你把这个表变成一个临时表,你肯定可以建立索引并提高速度。创建临时表的开销将在改进的索引访问、缓存以及根据您的用例在多用户场景中重复使用相同的临时表方面得到更多的回报。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31598491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档