调用 UDF 本身时进行索引查找,将 UDF 包装在 sp 中时进行索引扫描

发布于 2024-09-26 10:42:54 字数 167 浏览 6 评论 0原文

我有一个执行大部分连接的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

峩卟喜欢 2024-10-03 10:42:54

根据您对 (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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文