【发布时间】:2017-02-08 16:30:32
【问题描述】:
我有一份报告,其中的数据集非常慢。不幸的是,我们目前无法进一步优化查询。但是,无论我更改什么超时,报告仍然会在 10 分钟后超时。我已经尝试过报表数据集超时、报表执行超时以及在 sql server 上的远程执行。似乎都没有奏效。
一点挖掘产生了以下资源,我也尝试过无济于事:
https://msdn.microsoft.com/en-us/library/ms155782.aspx
为什么我的报告会在 10 分钟后超时?
脚本:
DECLARE @SessionDateFrom DATETIME = '2016/11/01'
DECLARE @SessionDateTo DATETIME = '2016/12/01'
DECLARE @SiteNo INT = 1
SELECT DISTINCT [CS].[No] AS SiteNo
,[CS].[Name] AS SiteName
,TSE.[MediaNo] AS Media
,TSE.[MediaIndex]
,Sum(TSE.[Qty]) AS SalesQty
,Sum(TSE.[Value]) AS SalesValue
,TSE.[MediaGroup]
,TSE.[MediaName]
,TSE.SortOrder
,TSE.[ReasonNo]
,[R].[Name] AS ReasonName
,Convert(BIT, CASE
WHEN TSE.[MediaNo] NOT IN (
1001
,1002
,1003
,1004
,3002
,3004
,7002
,7004
,7006
)
THEN 1
ELSE 0
END) AS Clickable
FROM TSE
LEFT JOIN CS ON CS.No = TSE.SiteNo
LEFT JOIN R ON (R.No = TSE.ReasonNo)
WHERE EXISTS (
SELECT Descendant
FROM DescendantSites
WHERE Parent = @SiteNo
AND Descendant = TSE.SiteNo
)
AND (
Qty <> 0
OR Value <> 0
)
AND MediaNo <> 0
AND ExcludeFromReport <> 1
--AND (
-- MediaNo IN (@MediaNo)
-- OR MediaNo IS NULL
-- )
AND TermNo = 0
AND SessionDate BETWEEN @SessionDateFrom
AND @SessionDateTo
GROUP BY [CS].[No]
,[CS].[Name]
,TSE.[MediaNo]
,TSE.[MediaIndex]
,TSE.[MediaGroup]
,TSE.[MediaName]
,TSE.SortOrder
,TSE.[ReasonNo]
,[Reason].[Name]
ORDER BY TSE.[MediaGroup]
,TSE.[SortOrder]
,TSE.[MediaIndex]
OPTION (OPTIMIZE FOR UNKNOWN)
需要过滤媒体,但如果它可以在合理的时间内全部返回,那么应该没问题(如果逻辑错误,请纠正我。我对 sql 很陌生)。
【问题讨论】:
-
“我们目前无法进一步优化查询”不知何故我怀疑这一点......
-
您是在另一个网络应用程序中调用报告还是使用 ssrs 管理器?
-
@NinjaArekku 这不是一个有效的 SQL 脚本...
CfgSites表完全丢失。作为一种良好做法,您还应该在所有列引用上使用适当的表别名。比如MediaNo来自哪个表? -
@NinjaArekku 也就是说,你有一个
distinct和group bys 表明你担心重复?这表明您没有正确地将表连接在一起。 -
@NinjaArekku 能否请您添加表行号、查询输出中的行数、此查询需要多长时间单独运行以及报告正在做什么的详细信息?
标签: sql-server reporting-services ssrs-2008