sql - 在 SSRS 中使用存储过程代替 SQL 查询时性能下降
问题描述
为了提高我的报告在加载时间方面的性能,我想将源从直接查询更改为存储过程,但使用存储过程需要更多时间。
我有这个 SQL 查询:
SELECT DISTINCT
*,
YEAR(DT_DATE) YEAR1,
DATENAME(mm, DT_DATE) Month1,
CAST([Original Service Line TCV] AS float) OSL_TCV,
CAST([BB12] AS decimal) BB12_new
FROM
T_OPTYLINEVIEW_REP
WHERE
[Selling SBU] IN (@selling_SBU)
AND [Selling BU] IN (@selling_BU)
AND [Selling MU] IN (@selling_MU)
AND [Stage] IN (@stage)
AND [Account Type] IN (@Account_Type)
AND [Business Line] IN (@Business_Line)
AND [Business Line Level 1] IN (@Business_Line_Level_1)
AND [Business Line Level 2] IN (@Business_Line_Level_2)
AND [Offer] IN (@Offer)
AND [Sector] IN (@Sector)
AND [Portfolio] IN (@Portfolio)
AND [flag Altran Collaboration] IN (@flag_Altran_Collaboration)
AND [Selling Reporting Unit] IN (@Selling_Reporting_Unit)
AND CONVERT(VARCHAR, DT_TECH_UPD, 103) = CONVERT( VARCHAR, @ReportAsOn, 103)
我将此查询直接放入 SSRS。为此,如果我在报告服务器执行日志中看到检索时间,它大约需要 11000 毫秒。
我将其转换为存储过程以使处理更快->
[dbo].[OptyLineView_test_proc](
@selling_SBU nvarchar(max),
@selling_BU nvarchar(max),
@selling_MU nvarchar(max),
@stage nvarchar(max),
@Account_Type nvarchar(max) ,
@Business_Line nvarchar(max),
@Business_Line_Level_1 nvarchar(max),
@Business_Line_Level_2 nvarchar(max),
@Offer nvarchar(max),
@Sector nvarchar(max),
@Portfolio nvarchar(max),
@flag_Altran_Collaboration nvarchar(max),
@Selling_Reporting_Unit nvarchar(max),
@ReportAsOn date)
as
select DISTINCT *,
YEAR(DT_DATE) YEAR1,
datename(mm,DT_DATE) Month1,
CAST([Original Service Line TCV] as float)OSL_TCV,
CAST([BB12] as decimal) BB12_new
from T_OPTYLINEVIEW_REP
where [Selling SBU] in (select * from STRING_SPLIT(@selling_SBU, ','))
and [Selling BU] in (select * from STRING_SPLIT(@selling_BU, ','))
and [Selling MU] in (select * from STRING_SPLIT(@selling_MU,','))
and [Stage] in (select * from STRING_SPLIT(@stage,','))
and [Account Type] in (select * from STRING_SPLIT(@Account_Type,','))
and [Business Line] in (select * from STRING_SPLIT(@Business_Line,','))
and [Business Line Level 1] in (select * from STRING_SPLIT(@Business_Line_Level_1,','))
and [Business Line Level 2] in (select * from STRING_SPLIT(@Business_Line_Level_2,','))
AND [Offer] in (select * from STRING_SPLIT(@Offer,','))
AND [Sector] in (select * from STRING_SPLIT(@Sector,','))
AND [Portfolio] in (select * from STRING_SPLIT(@Portfolio,','))
AND [flag Altran Collaboration] in (select * from STRING_SPLIT(@flag_Altran_Collaboration,','))
AND [Selling Reporting Unit] in (select * from STRING_SPLIT(@Selling_Reporting_Unit,','))
AND CONVERT(VARCHAR,DT_TECH_UPD , 103) = CONVERT(VARCHAR,@ReportAsOn , 103)
当我在 SSRS 中使用此过程时,日期检索时间约为 100000 毫秒。
为什么它在存储过程的情况下增加了?
解决方案
推荐阅读
- python - 使用python:查找文件并复制到另一个目录
- bash - 根据用户输入重复 bash 脚本
- r - 使用 R 包bayesplot 中的 mcmc_areas() 更改一些后验分布的颜色
- visual-studio-code - VSCode:在定义的文本之间切换
- arrays - 用 3 个参数减少调用,中间有一个奇怪的参数
- python - 将模块文件夹名而不是文件名添加到 Tortoise ORM config_file
- html - 如何使用 Bootstrap(我猜)让 iframe 填充剩余屏幕区域的宽度和高度?
- python - Kubernetes 集群中使用 Python 套接字的服务器-客户端连接
- c# - ASP.NET Core - IServiceProvider 何时处置?
- docker - 在 Container-Optimized OS 中保存持久性可执行文件的位置