【发布时间】:2013-04-03 14:36:47
【问题描述】:
我在 SSRS 2012 中运行一个非常基本的报告。我只是从表中检索一些数据,并且我在查询的 Where 子句中使用了一个参数。如果我对 SSRS 查询中的参数进行硬编码,则查询运行速度很快(不到 5 秒),但如果将其保留为动态选择的参数,则查询需要 5 分钟以上才能呈现。这是一个类似于我正在使用的抽象查询:
Select Col1, Count(*)
From Tbl1
Where Col2 = @Para1
Group By Col1
OPTION (RECOMPILE);
我已经尝试在查询中使用 OPTION (RECOMPILE) 来解决参数嗅探问题。我还检查了数据类型,Col2 是 CHAR(2),Para1 是 TEXT,所以在运行时不需要转换。
有什么想法可能导致这种情况吗?
【问题讨论】:
-
尝试在 SQL Mgmt studio 中运行带有参数和不带参数的查询(硬编码)。看看执行计划是否不同。
-
您可以使用 COUNT(1) 来避免处理 COUNT(*) 中的所有列。相同的输出。
-
尝试使用
stored procedures而不是ad-hoc查询