调用 UDF 本身时进行索引查找,将 UDF 包装在 sp 中时进行索引扫描
我有一个执行大部分连接的 UDF,当我运行它时,它会读取大约 100-150 页(来自 sql profiler),但如果我将此 UDF 包装在 sp 中,那么 sp 将读取大约 243287 页。
此外,UDF 本身执行索引查找,但 sp 对搜索列之一执行索引扫描。
有人可以请建议吗?
I have a UDF that does most of the joins and when I run it, it read about 100-150 pages (from sql profiler) but if I wrap this UDF in sp then the sp will do the read about 243287 pages.
Furthermore, the UDF itself performs index seek but the sp performs index scan on one of the searched columns.
Can anyone please advise?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
根据您对
(custid = @param1 OR @param1 is null)
与(custid = @param1)
的评论,我认为 Gail Shaw 的博客文章 Catch-all 查询 将为您提供一些关于您的信息的见解又看到这里了。基本上,我认为您获得了针对@param1 is null
情况缓存的执行计划,当您传入真正的@param1
时,该执行计划的性能会很差。Based on your comments about
(custid = @param1 OR @param1 is null)
vs.(custid = @param1)
, I think Gail Shaw's blog posting on Catch-all queries will provide some insight into what you're seeing here. Basically, I think you're getting an execution plan cached for the@param1 is null
case that then performs poorly when you pass in a real@param1
.