SQL Server功能优化(花费的时间太长)

时间:2019-02-21 22:58:42

标签: sql-server reporting-services

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

  1. Item1
  2. Item2
  3. Item3
  4. 全部

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

...where (@parameterName = 'All' or table.name = @parameterName)

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

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

如果用户仍然从下拉菜单中选择“全部”,则该功能将在不到一秒钟的时间内运行。

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

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

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

1 个答案:

答案 0 :(得分:1)

您拥有的是一个全面查询。考虑在语句末尾添加OPTION (RECOMPILE)。这将迫使引擎在每次运行查询时都重新创建计划,这意味着它不会基于之前的运行(其中变量的值类似'Item1')使用错误的选择。