我有这个问题:
Select
'<ALL>' as name,
'<ALL>' as pid,
'<ALL>' as type
union all
Select distinct
instructor.name as name,
instructor.Pid as pid,
instructor_type as type
From sisinfo.dbo.SISCRSI instructor
inner join section_info as section
on section.sctn_id_code = instructor.sctn_id_code
Where section.sctn_term_code in (@Terms)
and section.subj_code in (@Subject)
order by name
当我在SSMS中运行它时,它在非常接近零的时间内完成。当我为它提供一些值时,它也在SSRS查询设计器中快速运行。但是当我预览报表时,查询至少需要两分钟才能运行。我不确定这里发生了什么,我以前从来没有遇到过SSRS这样的问题。
答案 0 :(得分:7)
正如评论中所讨论的那样,让我们摆脱参数,看看你的查询是否受到参数嗅探的影响。
为此,我们从头开始构建SQL语句。 SSRS中的大多数内容都可以是包含SQL查询的表达式,因此您可以将其构建为字符串。使用这些参数,我们会使用JOIN
将它们转换为逗号分隔列表。
因此,对于您的SQL语句,请进入“数据集属性”对话框(而不是查询编辑器),然后按fx
表达式编辑器按钮将查询表达式编辑为文本,并使其成为以下表达式:< / p>
="Select '<ALL>' as name, '<ALL>' as pid, '<ALL>' as type "
&"union all "
&"Select distinct instructor.name as name, instructor.Pid as pid, instructor_type as type "
&"From sisinfo.dbo.SISCRSI instructor "
&"inner join section_info as section on section.sctn_id_code = instructor.sctn_id_code "
&"Where section.sctn_term_code in (" & Join(Parameters!Terms.Value, ",") & ") "
&"and section.subj_code in (" & Join(Parameters!Subject.Value, ",") & ") "
&"order by name "
我们在这里做的是将SQL表达式转换为字符串,我们将多值参数作为字符串而不是参数提供,从而消除参数嗅探作为查询运行缓慢的原因。
如果你的查询在此之后很慢,你知道它不是参数嗅探问题,但至少你会将其视为原因。
答案 1 :(得分:2)
当我遇到同样的事情时,我尝试了几个选项。
首先是更改存储过程中变量的参数,然后在查询中使用这些新变量。
Declare @TermsNew DataType = @Terms
Declare @SubjectNew DataType = @Subject
Select '<ALL>' as name, '<ALL>' as pid, '<ALL>' as type
union all
Select distinct instructor.name as name, instructor.Pid as pid, instructor_type as type
From sisinfo.dbo.SISCRSI instructor
inner join section_info as section on section.sctn_id_code = instructor.sctn_id_code
Where section.sctn_term_code in (@TermsNew) and section.subj_code in (@SubjectNew)
order by name
此处已建议的另一个选项是添加
Option(Recompile);
在查询结束时重新编译执行计划。
虽然尝试了以上内容对我有用的东西......如果你拉大结果集,请确保在tablix属性中不设置为“将结果保持为一个页面,如果可能“。我关掉了,我的报告从70秒变为7。
答案 2 :(得分:1)
实际上,事实证明这个查询并不是那个问题,而是另一个同时运行的问题(我认为SSRS可以同时运行多个查询)。我认为它是贴出来的,因为它填充了一个字段。感谢所有的建议,我将来可能最终会使用它们。
答案 3 :(得分:0)
这听起来像参数嗅探给我 - 我总是看到这一切都是复杂的。我会将OPTION(RECOMPILE)提示添加到SQL的末尾。