首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL Server函数优化(耗时过长)

SQL Server函数优化(耗时过长)
EN

Stack Overflow用户
提问于 2019-02-22 06:58:42
回答 1查看 23关注 0票数 0

我设计了一个处理SSRS报告的函数。我有一个下拉参数,它列出了多个项目,并且只能选择一个。这个下拉列表从查询/数据集中获取数据,我在其中添加了一行表示“All”的数据。因此,下拉列表将如下所示:

  1. Item1
  2. Item2
  3. Item3
  4. All

然后在函数中,我在where子句中做了一个小改动:

代码语言:javascript
复制
...where (@parameterName = 'All' or table.name = @parameterName)

这样做的问题是table.name大约有50000行数据。当用户在下拉列表中选择'All‘时,我会认为因为括号中的第一条语句是真的,并且下一条语句(在’or‘之后)甚至不应该被执行。但它会导致查询运行5-20分钟,并且在此之后仍然不会产生任何结果。如果我简单地将where子句改为

代码语言:javascript
复制
...where (@parameterName = 'All')

如果用户仍然从下拉列表中选择“全部”,该函数将在不到一秒的时间内运行。

我用另一个过滤器实现了一个类似的概念,但我猜是因为该参数使用的表要小得多(大约90行),所以不会花很长时间。

基本上有没有一种方法可以得到一个计算成本不高的可选参数?

编辑:我将添加参数声明为nvarchar(max)。将其更改为更小的值会对查询有帮助吗?

EN

回答 1

Stack Overflow用户

发布于 2019-02-22 07:09:57

您所拥有的是一个通用的查询。考虑将OPTION (RECOMPILE)添加到语句的末尾。这将迫使引擎在每次运行查询时重新创建计划,这意味着它不会使用基于前一次运行的糟糕选择,因为您的变量具有类似'Item1'的值。

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

https://stackoverflow.com/questions/54817560

复制
相关文章

相似问题

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