0
我刚刚有一个随机问题,下面的这个查询开始迷路了。不知道这是否是一种侥幸,因为我使用此查询来创建报告,并在过去的一年中每天至少使用过几次。今天早上,我从我的SQL DBA接到一个电话,告诉我查询自周四早上开始运行。查询本身通常需要15 - 30秒才能运行。可能改进此TSQL查询?
http://i.stack.imgur.com/pMy2d.png
SELECT
AllAlerts.AlertID as AlertID,
Queues.QueueID as QueueID,
Queues.QueueName as QueueName,
AllAlerts.ConnectorID as ConnectorID,
cast(ISNULL(STUFF ((
select cast(',' as varchar(max)) + Services.Label
from (
SELECT distinct Services.Label
from [ISG_SOI ].[dbo].[SecureServiceCI] as Services
inner join [ISG_SOI ].[dbo].[CIRelationship] as Relationship
on Relationship.BNodeCIID = AllAlerts.CIID
where Services.CIID = Relationship.ServiceCIID
) as Services
for xml path ('')
), 1, 1, ''), '') as CHAR(1000)) as OwnedServices,
SUBSTRING(AllAlerts.DeviceID,
ISNULL(2 + LEN(AllAlerts.DeviceID) - NULLIF(CHARINDEX(',', REVERSE(AllAlerts.DeviceID)), 0), 0),
CASE CHARINDEX(':', AllAlerts.DeviceID) WHEN 0 THEN LEN(AllAlerts.DeviceID) + 1 ELSE CHARINDEX(':', AllAlerts.DeviceID) END -
ISNULL(2 + LEN(AllAlerts.DeviceID) - NULLIF(CHARINDEX(',', REVERSE(AllAlerts.DeviceID)), 0), 0)
) AS CIName,
AllAlerts.DeviceID as DeviceID,
AllAlerts.SituationMessage as Summary,
AllAlerts.AlertDetail as Detail,
AllAlerts.Acknowledged as Acknowledged,
AllAlerts.UserAttribute5 as Occurrences,
"AcknowledgedBy" =
CASE
WHEN AllAlerts.Acknowledged = '1' THEN ISNULL(History.CreatedBy, '')
WHEN AllAlerts.Acknowledged = '0' THEN ' '
END,
AllAlerts.AssignedTo as AssignedTo,
DATEADD(HOUR, DATEDIFF (HH, GETUTCDATE(), GETDATE()), AllAlerts.ReportedTime) as CreatedTime,
DATEADD(HOUR,DATEDIFF (HH, GETUTCDATE(), GETDATE()), AllAlerts.ClearedTime) as ClearedTime,
"Severity" =
CASE
WHEN AllAlerts.Severity = '4' THEN 'Down'
WHEN AllAlerts.Severity = '3' THEN 'Critical'
WHEN AllAlerts.Severity = '2' THEN 'Major'
WHEN AllAlerts.Severity = '1' THEN 'Minor'
END,
AllAlerts.SvcDeskTicket as TicketID,
ISNULL(STUFF ((
select cast('# ' as varchar(max)) + Notes.AnnotationText + '[' + Notes.CreatedBy + ', ' + cast(Notes.CreatedTime as varchar(max)) + ']'
from [ISG_SOI ].[dbo].[AlertAnnotation] as Notes
where Notes.AlertID = AllAlerts.AlertID
for xml path('')
), 1, 1, ''), '') as Notes
from
[ISG_SOI ].[dbo].[Alerts] as AllAlerts
inner join [ISG_SOI ].[dbo].[AlertQueueAssignments] as QA
on QA.[AlertID] = AllAlerts.[AlertID]
inner join [ISG_SOI ].[dbo].[AlertQueues] AS Queues
on Queues.[QueueID] = QA.[QueueID]
left join
(
select History.AlertID, max(History.CreatedBy) as CreatedBy
from [ISG_SOI ].[dbo].[AlertHistory] as History
where History.ColumnName = '73549'
and History.Currentvalue = 'true'
group by History.AlertID
) as History
on History.AlertID = AllAlerts.AlertID
由于一吨的快速反应。我现在就给这个人一个镜头,并会报告回来。谢谢! – 2014-11-24 13:22:59
工作就像一个魅力。查询时间缩短了10秒,执行路径更加干净 – 2014-11-24 14:30:45