MSSQL查询可以更快地从两个表中获取最新值

时间:2015-06-01 16:52:25

标签: sql tsql

此查询从两个不同的表中提取时间戳(DT_CREATED)并选择最新的时间戳。 INCIDENT_AUDIT_HISTORY表非常大,即使我通过添加索引将性能提高了10秒,我的查询仍然需要超过20秒才能运行,这比应用程序所需的时间长。我想知道是否有更有效的方法来编写此查询?

    SELECT        i.NUMBER, i.PROBLEM, st.LABEL AS STATUS, i.ID_ASSIGNEE, r.LNAME + ', ' + r.FNAME AS ASIGNEE, c.LNAME + ', ' + c.FNAME AS CUST_NAME, 
                     p.LABEL AS PRIORITY, i.DT_CREATED,
                         (SELECT        MAX(DT_CREATED) AS LAST_WORK
                           FROM            (SELECT        TOP (1) DT_CREATED
                                                     FROM            dbo.REP_WORK_HISTORY AS b
                                                     WHERE        (i.NUMBER = INCIDENT_NUMBER) AND (ID_OWNER = r.ID)
                                                     ORDER BY DT_CREATED DESC
                                                     UNION
                                                     SELECT        TOP (1) DT_CREATED
                                                     FROM            dbo.INCIDENT_AUDIT_HISTORY AS c
                                                     WHERE        (i.NUMBER = INCIDENT_NUMBER) AND (ID_OWNER = r.ID)
                                                     ORDER BY DT_CREATED DESC) AS a) AS LAST_HISTORY, g.GROUP_NAME FROM            dbo.REPS AS r RIGHT OUTER JOIN
                     dbo.GROUPS AS g ON r.ID_DEFAULT_GROUP = g.ID RIGHT OUTER JOIN
                     dbo.INCIDENTS AS i ON r.ID = i.ID_ASSIGNEE LEFT OUTER JOIN
                     dbo.CUSTOMERS AS c ON i.ID_CUSTOMER = c.ID LEFT OUTER JOIN
                     dbo._PRIORITIES AS p ON i.PRIORITY = p.ID LEFT OUTER JOIN
                     dbo.INCIDENT_STATUSES AS st ON i.ID_STATUS = st.ID WHERE (st.TYPE <> 2) AND (st.TYPE <> 16)

0 个答案:

没有答案