如何做查询优化。目前的资讯主页显示时间超过3分钟

时间:2019-05-31 19:27:21

标签: sql-server reporting-services sql-server-data-tools

我正在增强内置的仪表板,该仪表板需要很长时间进行查询。但是,我是SSDT的新手,我不知道应该去哪里看看。

我试图删除可能导致问题的图表,但是没有运气。

IF OBJECT_ID('tempdb..#temp1') IS NOT NULL DROP TABLE #temp1

SELECT HD.Incident_Number,HDA.log,HDA.Assigned_To,HD.Entry_ID,

DATEADD(hour, 14, DATEADD(day, 25567, HDA.Create_Date / (60.0 * 60.0 * 24.0) - 0.25)) AS MSC_submit_Date,
       CONCAT(FORMAT(DATEPART(hh, DATEADD(hour, 14, DATEADD(day, 25567, HDA.Create_Date / (60.0 * 60.0 * 24.0) - 0.25))), '00'), ':', FORMAT(DATEPART(mi, DATEADD(hour, 14, DATEADD(day, 25567, HDA.Create_Date / (60.0 * 60.0 * 24.0) - 0.25))), '00'), ':', FORMAT(DATEPART(ss, DATEADD(hour, 14, DATEADD(day, 25567, HDA.Create_Date / (60.0 * 60.0 * 24.0) - 0.25))), '00')) AS Time

INTO #temp1
FROM HPD_Help_Desk HD LEFT OUTER JOIN 
                    -- HPD_WorkLog AS HPD_WL ON HPD_WL.Incident_Number = HD.Incident_Number LEFT OUTER JOIN
                    --reference.dbo.SAP_worker AS rsw ON HD.Internet_E_mail = LOWER(rsw.micron_username) + '@micron.com' LEFT OUTER JOIN
                    HPD_HelpDesk_AuditLogSystem AS HDA ON HD.Entry_ID = HDA.Original_Request_ID 
                    --SLM_Measurement AS SM ON HD.Incident_Number = SM.ApplicationUserFriendlyID  

WHERE 
(DATEADD(hour, 14, DATEADD(day, 25567, HDA.Create_date/ (60.0 * 60.0 * 24.0) - 0.25)) >= @Shift_start_time) 

NA

1 个答案:

答案 0 :(得分:1)

在WHERE子句中使用日期函数会终止索引使用。网上有很多关于此的文章。您可以通过搜索SARG轻松地在Google上搜索。例如here

因此,为了使查询工作更快,您需要执行以下操作:

  • HPD_HelpDesk_AuditLogSystem表创建索引。最简单的方法是检查该查询的解释计划,SSMS可能会建议该索引不存在
  • 使WHERE子句中的谓词SARGable。很难理解其中存在什么逻辑。但简单地说,您需要以针对@Shift_start_time变量使用所有功能的方式来重新编写它。

还有一件事是您可以使用INNER JOIN而不是LEFT OUTER,因为您使用联接表列作为谓词。