SQL Server 2008 中的函数
sql server 是否缓存函数的执行计划?
Does sql server cache the execution plan of functions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
sql server 是否缓存函数的执行计划?
Does sql server cache the execution plan of functions?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
是的,请参阅 rexem 的 Tibor 链接和 Andrew 的答案。
然而......无论如何,一个简单的表值函数都不会嵌套/扩展到外部查询中。就像风景一样。 我的答案(带链接)在这里
也就是说,这种类型:
Yes, see rexem's Tibor link and Andrew's answer.
However... a simple table value function is unnested/expanded into the outer query anyway. Like a view. And my answer (with links) here
That is, this type:
根据 dmv 是的,http://msdn.microsoft.com/en- us/library/ms189747.aspx 但我必须运行测试来确认。
输出中的对象 ID 是“此查询计划的对象(例如,存储过程或用户定义函数)的 ID”。
测试了一下,是的,看起来他们确实获得了一个单独的计划缓存条目。
测试脚本:
创建的最基本的函数。
计划缓存有 4 个条目,其中 objtype = Proc 列出的条目是函数计划缓存,抓住句柄并将其打开。
我测试中的第一个临时查询是实际查询,第二个临时查询是请求计划缓存的查询。因此,它肯定会在与发出的即席查询不同的过程类型下收到一个单独的条目。计划句柄也不同,当使用计划句柄提取时,它会向原始函数提供一个对象 ID,而即席查询不提供对象 ID。
According to the dmv yes, http://msdn.microsoft.com/en-us/library/ms189747.aspx but I'd have to run a test to confirm.
Object ID in the output is "ID of the object (for example, stored procedure or user-defined function) for this query plan".
Tested it and yes it does look like they are getting a separate plan cache entry.
Test Script:
The most basic of functions created.
The plan cache then has 4 entries, the one listed as objtype = Proc is the function plan cache, grab the handle and crack it open.
The first adhoc on my test was the actual query, the 2nd ad-hoc was the query asking for the plan cache. So it definitely received a separate entry under a different proc type to the adhoc query being issued. The plan handle was also different, and when extracted using the plan handle it provides an object id back to the original function, whilst an adhoc query provides no object ID.