SQL Server函数优化(需要太长时间)

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (133)

我设计了一个与SSRS报告一起使用的功能。我有一个下拉参数,列出了多个项目,只能选择一个。这个下拉列表从查询/数据集中获取数据,我添加了一行数据,其中包含“全部”。所以下拉列表将如下所示:

  1. 项目1
  2. 项目2
  3. 项目3
  4. 所有

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

... where(@ parameterName ='All'或table.name = @parameterName)。

这个问题是table.name有大约50000行数据。当用户在下拉列表中选择“全部”时,我会想到,因为括号中的第一个语句为真,并且下一个语句(在“或”之后)甚至不应该执行。但它导致查询运行5-20分钟,并且在那么长时间后仍然不会产生任何结果。如果我只是将where子句更改为

... where(@ parameterName ='All')

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

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

基本上有一种方法可以让一个可选参数计算成本不高吗?

编辑:我将添加该参数声明为nvarchar(max)。将此更改为更小的内容有助于查询吗?

提问于
用户回答回答于

考虑添加OPTION (RECOMPILE)到语句的末尾。这将强制引擎在每次运行查询时重新创建计划,这意味着它将不会根据您的变量具有值的先前运行使用'Item1'

扫码关注云+社区

领取腾讯云代金券