我正在增强内置的仪表板,该仪表板需要很长时间进行查询。但是,我是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
答案 0 :(得分:1)
在WHERE子句中使用日期函数会终止索引使用。网上有很多关于此的文章。您可以通过搜索SARG
轻松地在Google上搜索。例如here。
因此,为了使查询工作更快,您需要执行以下操作:
HPD_HelpDesk_AuditLogSystem
表创建索引。最简单的方法是检查该查询的解释计划,SSMS可能会建议该索引不存在WHERE
子句中的谓词SARGable。很难理解其中存在什么逻辑。但简单地说,您需要以针对@Shift_start_time
变量使用所有功能的方式来重新编写它。 还有一件事是您可以使用INNER JOIN
而不是LEFT OUTER
,因为您使用联接表列作为谓词。